我有一个使用apache mod_rewrite
的网站,过去6个月一直没有错误。
我有以下重写规则:
RewriteRule ^products/([a-z\-]+)/$ /products.php?category=$1 [NC,L]
以下是我的页面products.php
$category = $_GET['category'];
if (isset($category)) {
// do some processing here
}
else {
header("Location: /500.html");
exit;
}
符合此规则的链接示例为/products/lighting-poles/
有谁知道为什么实际重写仍在进行但未将([a-z\-]+)
映射到category=$1
?
额外信息
我注意到主机上的.htaccess
文件已注释掉了Options +FollowSymLinks
行,所以我首先尝试重新启用此功能,只让网站返回apache白屏500
错误。
.htaccess文件中的更多内容
<IfModule mod_rewrite.c>
#Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Add a trailing slash to paths without an extension
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^(.*)$ $1/ [L,R=301]
# other rules including problem rule here
</IfModule>
答案 0 :(得分:3)
这听起来像是一个多视图问题。 Multiviews是一个内容协商的东西,如果它被打开,它会在URL文件映射管道中尝试一些不同的额外的东西,试图找到映射到URL的文件。您有/products/blah
之类的网址,但是您有一个名为products.php
的文件,因此多视图可能会尝试将products
映射到/products.php/blah
。因此,完全绕过重写规则,您没有看到category
参数。
选项如何,请尝试添加:
Options -Multiviews