htaccess 404 ne fonctionne pas correctement lors de l’ajout d’une barre oblique

Je vais essayer d’expliquer le plus clairement possible mon problème.

J’ai un site Web avec une URL propre, qui est redirigé via .htaccess. Le site est censé être bilingue (fr | en). (www.kamelya.ca)

Avec l’aide de htaccess, j’ajoute une barre oblique à tout ( http://kamelya.ca/fr/contact => http://kamelya.ca/fr/contact/ , etc.)

J’ai aussi un errorHandling 404 pour redirect vers une page d’erreur fr / 404.php.

Le problème est que lorsque j’essaie de gérer les pages d’erreur dans les dossiers “virtuels” (niveau 2 et +), cela ajoute beaucoup de .php à la fin. Ex .: http://kamelya.ca/fr/qwerty => http://kamelya.ca/fr/qwerty.php.php.php.php.php.php.php.php.php.php.php. php.php.php.php.php.php.php.php / (Cette page n’existe pas, mais je veux atterrir sur la page fr / 404.php).

Le htaccess gère correctement le premier niveau ( http://kamelya.ca/whateverincorrect => http://kamelya.ca/fr/404.php ) mais pas les niveaux suivants …

Voici le fichier htaccess (nettoyé, désolé pour les commentaires en français :)):

Options +FollowSymlinks RewriteEngine On RewriteBase / DirectoryIndex index.php # Error ErrorDocument 404 /fr/404.php # Add ending slash RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ %{REQUEST_URI}/ [R=301,L] # (Don't mind thoses next lines until #END, problem isn't here :) ) # Boutique en ligne RewriteRule ^(en|fr)/([0-9a-zA-Z+_-]*)-([0-9]*)/$ $1/boutique.php?cid=$3 [L] RewriteRule ^(en|fr)/([0-9a-zA-Z+_-]*)/([0-9a-zA-Z+_-]*)-([0-9]*)/$ $1/fiche.php?id=$4 [L] # Page principales RewriteRule ^(en|fr)/acces-client/$ $1/acces-client/ [L] RewriteRule ^(en|fr)/acces-client/(.*)/$ $1/acces-client/$2.php [L] RewriteRule ^(en|fr)/boutique-en-ligne/$ $1/boutique.php [L] # END RewriteRule ^(en|fr)/(.*)/(.*)/$ $1/$3.php [L] RewriteRule ^(en|fr)/(.*)/$ $1/$2.php [L] RewriteRule ^(en|fr)/$ $1/index.php [L] 

Je sais que les trois dernières lignes sont problématiques. (C’est le seul moyen que j’ai trouvé pour gérer plusieurs niveaux de dossiers virtuels …)

Ma structure de fichiers physique sur le serveur est la suivante:

 httpdocs .htaccess fr (folder) - index.php - contact.php - boutique.php - fiche.php - etc -en (folder) (which isn't complete yet, but will get all same structure as fr) 

Donc, quel que soit le niveau virtuel que nous sums (niveau 1, niveau 2 ou niveau 3), tous les fichiers “réels” se trouvent dans le dossier “fr”.


Voici 3 exemples:

Niveau 1 – http://kamelya.ca/fr (404 = OK: http://kamelya.ca/frr )

Niveau 2 – http://kamelya.ca/fr/contact (404 NON OK: http://kamelya.ca/fr/contactt )

Niveau 3 – http://kamelya.ca/fr/a-propos/pourquoi-choisir-kamelya (404 NON OK: http://kamelya.ca/fr/a-propos/pourquoi-choisir-kamelyaa )

Si vous avez besoin de plus de clarifications / explications, n’hésitez pas à demander! (Les changements de code sont également les bienvenus!)

Merci beaucoup pour votre aide!

Cela se produit en raison de votre règle de barre oblique. Changez cette règle pour:

 # Add ending slash RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^[^.]+?[^/.]$ %{REQUEST_URI}/ [R=302,L] 

Cela évitera d’append une barre oblique s’il y a un point dans votre URL.