重写两个不同的东西时内部服务器错误

时间:2013-11-21 08:28:31

标签: php .htaccess mod-rewrite url-rewriting

我试图单独重写我网站和博客上的两个页面。 当另一个存在时,我在博客页面上收到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]

3 个答案:

答案 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]