500仅在localhost上使用.htaccess的内部错误 - 重定向循环

时间:2014-01-07 13:22:48

标签: apache .htaccess mod-rewrite http-redirect

我有以下.htacess文件来删除.php扩展名并创建SEO友好网址:

RewriteEngine On 

ErrorDocument 404 /404.php

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ index.php?page=$1 [L]

在托管在我们的域上时,这非常正常,但是当我在本地主机服务器上进行本地测试时,它会出现错误500,内部服务器错误。

在我的httpd.conf文件中,重写模块已取消注释:

LoadModule rewrite_module modules/mod_rewrite.so

Apache错误日志声明:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://localhost:8888/Website/

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

是的,这肯定是由于循环。

您的第一条规则是删除.php扩展名。然后404处理程序和第二个规则将所有内容发送到.php文件,因此循环将继续。

为避免您可以使用以下规则:

RewriteEngine On 
RewriteBase /Website/

ErrorDocument 404 /Website/404.php

RewriteCond %{THE_REQUEST} \s/+/Website/(.+?)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ index.php?page=$1 [L,QSA]

注意使用%{THE_REQUEST}代替RewriteRuleTHE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且不会因应用其他规则而发生变化。