2014-04-21 24 views
0

我想從要求刪除擴展,並將其添加在服務器端,所以我.htaccess文件中寫了這個代碼:htaccess的重定向的原因錯誤500

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L] 

此代碼工作在標準的使用極大。例如,如果我有HOME/foo/bar.php
中的文件,並且我要求它如localhost/foo/bar,代碼正在工作並將我重定向到正確的文件。

但如果我的要求是localhost/foo/bar/(末尾反斜線),或localhost/foo/bar/a 我得到了內部服務器錯誤(500),並在日誌文件中我得到了Request exceeded the limit of 10 internal redirects

我一直在測試的代碼,只見那%{REQUEST_FILENAME}忽略請求/a錯誤的後綴,因此只能看到HOME/foo/bar,但重寫規則$1劑量不能忽視它。

我的代碼有什麼問題?

回答

1

試試這個規則來代替:

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

這需要照顧斜線問題以及確保正確的PHP文件的改寫前存在。