web-dev-qa-db-fra.com

Problème avec .htaccess pour les fichiers ayant des noms similaires

J'ai un fichier avec le nom lang.php et un autre fichier dans le même dossier avec le même lang_inst.php. Le .htaccess utilise est:

RewriteEngine On
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^folder/lang folder/lang.php [NC,L]


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)folder/lang_inst/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) folder/lang_inst.php?lngid=$1&lngname=$2 [NC,L]

Le problème est que quand je vais à lng.php cela fonctionne bien même si je tape lng.klklk ou lng nous afficherons la page lng.php seulement mais quand nous essaierons de voir lng_inst.php page nous obtenons le même contenu que lng.php page avec le total de CSS perturbé. Je veux dire la conception totale de CSS tout ce qui manque.

J'ai essayé de créer la même page avec d'autres noms et cela fonctionne bien. Je ne veux pas renommer ou recréer de pages parce que j'ai tellement de pages comme ça. Je veux dire des fichiers commençant par les mêmes mots (comme sample.phpsample_create.php).

S'il vous plaît, aidez-moi à résoudre ce problème.

3
swetha

Une demande de lng_inst.php sera naturellement interceptée par la première règle, plus générique. Vous devez inverser vos deux règles, donc la règle la plus spécifique est la première. Par exemple:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)folder/lang_inst/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) folder/lang_inst.php?lngid=$1&lngname=$2 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^folder/lang folder/lang.php [NC,L]

Vous devez également désactiver MultiViews (qui remplacera autrement votre directive pour réécrire lang en lang.php), si vous ne l'avez pas déjà fait:

Options -Indexes -MultiViews

Alternativement, vous pouvez simplement rendre votre première directive plus spécifique (en fonction de votre cas d'utilisation) et faire correspondre exactementfolder/lang et non toute URL qui commence avec cette URL. Par exemple, modifiez le RewriteRulemotif comme suit: ^folder/lang$ ($ supplémentaire après la fin).

De côté: Utilisez uniquement l'indicateur NC (nocase) si vous avez spécifiquement besoin d'une correspondance insensible à la casse. Pour un réécrire, ce n'est probablement pas le cas, car vous créez potentiellement un problème de contenu en double.

1
MrWhite