我试图单独重写我网站和博客上的两个页面。 当另一个存在时,我在博客页面上收到500内部服务器错误。
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
重写规则1:
RewriteRule ^(.+)$ $1.php [L,QSA]
重写规则2:
RewriteRule ^blog/([-a-zA-Z0-9]+)/?$ blog.php?title=$1 [L,NC]
答案 0 :(得分:2)
这对于PATH_INFO来说有点奇怪。我猜测由于博客请求,php扩展规则正在循环。条件:
RewriteCond %{REQUEST_FILENAME}.php -f
当您收到如下请求时,会导致 true :
/blog/blah-title/
因为blog.php
文件存在,%{REQUEST_FILENAME}
实际上正在检查PATH_INFO。这意味着它实际上会尝试:
/blog.php/blah-title/
在这种情况下-f
为真。
尝试将条件更改为更直接:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
不会像%{REQUEST_FILENAME}
那样进行任何类型的PATH_INFO匹配。
答案 1 :(得分:0)
我认为regexp中存在语法错误
RewriteRule ^blog/([\-a-zA-Z0-9]+)/?$ blog.php?title=$1 [L,NC]
# ^
答案 2 :(得分:0)
试
RewriteRule ^blog/([a-zA-Z0-9\-]+)/$ blog.php?title=$1 [L,NC]