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