重写两个不同内容时出现内部服务器错误


Internal Server Error when rewriting two different things

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

PATH_INFO有点奇怪。我猜php扩展规则是因为博客请求而循环的。条件:

RewriteCond %{REQUEST_FILENAME}.php -f 

当您有这样的请求时,结果为true

/blog/blah-title/

因为blog.php文件存在,所以%{REQUEST_FILENAME}实际上正在检查PATH_INFO。这意味着它实际上要尝试:

/blog.php/blah-title/

在这种情况下CCD_ 3为真

尝试将条件更改为更直接:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f

其不会像CCD_ 4那样进行任何类型的PATH_ INFO匹配。

我认为regexp 中存在语法错误

RewriteRule ^blog/(['-a-zA-Z0-9]+)/?$ blog.php?title=$1 [L,NC]
#                   ^

尝试

RewriteRule ^blog/([a-zA-Z0-9'-]+)/$ blog.php?title=$1 [L,NC]