2017-10-14 5 views
2

J'ai dans mon .htaccess:Le fichier .htaccess est à l'origine d'un étrange « Le nombre maximum de redirect atteint » erreur

# Remove php extension 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) $1.php [L] 

Il en est ainsi que /page.php est réécrite/page.

Le problème est que si je vais à une URL non-existante avec un «/» à la fin, je reçois une erreur 500, et ce Connectées:

2017-10-12 17:51:07.857 [ERROR] [103.9.XXX.XXX:50468] Maximum number of redirect reached. 

Le serveur est en fait Lite Speed ​​http://www.litespeedtech.com/, mais nous rencontrons le même problème avec Apache.

Comment le réparer?

Répondre

0

Oui après le premier recâblage vous recâblez le résultat à nouveau ainsi page/ à page/.php et à page/.php.php et ainsi de suite. Il suffit de faire ceci:

RewriteEngine On 
RewriteBase/
# exclude all existing directories 
RewriteCond %{REQUEST_FILENAME} !-d 
# exclude all existing files 
RewriteCond %{REQUEST_FILENAME} !-f 
# exclude any request with .php at the end 
RewriteCond %{REQUEST_URI} !^.*\.php$ [NC] 
# Ignore leading and trailing slashes 
RewriteRule ^/?(.*)/?$ $1.php [L] 

L'explication est dans les commentaires

+0

ok merci! Mais [L] ne signifie-t-il pas "dernier", ce qui signifie qu'il ne devrait pas continuer à réécrire ...? – Merc

+0

Ceci est une idée fausse. Cela signifie que si vous aviez une autre règle de réécriture après celle-ci, les prochaines seraient ignorées. Donc, en ce sens, c'est le dernier de cette itération. – Webdesigner

+0

Donc, une fois réécrite, l'URL passe à travers la réécriture complète à nouveau ...? – Merc

1

Vous pouvez utiliser:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 

qui vérifie si le fichier existe avant réécriture.
Et fonctionne avec / à la fin.