我有以下.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/
有什么想法吗?
答案 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}
代替RewriteRule
。 THE_REQUEST
变量表示Apache从您的浏览器收到的原始请求,并且不会因应用其他规则而发生变化。