2

我有一个网站,它使用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>
4

1 回答 1

3

这听起来像一个多视图问题。Multiviews 是一个内容协商的东西,如果它被打开,它会在 URL 文件映射管道中尝试一些不同的额外的东西来尝试找到一个映射到 URL 的文件。在这里,您有一个类似的 URL /products/blah,但是,您有一个名为 的文件products.php,因此多视图可能会尝试映射products/products.php/blah. 因此完全绕过了重写规则,你看不到category参数。

选项在哪里,尝试添加:

Options -Multiviews
于 2013-04-24T02:46:48.733 回答