用mod_rewrite获取404

时间:2012-06-06 19:29:02

标签: .htaccess mod-rewrite apache2

我正在尝试使用mod_rewrite来清理我拥有的一些动态URL。

网站根目录中的.htaccess如下:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^equipment/AlarisSystem/([^/]*)/([^/]*)$ /equipment/AlarisSystem/?manu=$1&model=$2 [L]

我想从http://www.mysite.com/equipment/AlarisSystem/?manu=test1&model=test2重写为http://www.mysite.com/equipment/AlarisSystem/test1/test2

如果我输入上面的“干净”地址,我会收到404错误。我做过研究,找不到我错的地方。是的,mod_rewrite已启用。谢谢你的帮助。

修改 我知道正在读取我的.htaccess文件。我这样做是为了检查:

Redirect /google.html http://www.google.com此规则正常运行。

1 个答案:

答案 0 :(得分:1)

你的规则似乎是正确的,但你可能没有改写到正确的地方。您要重写的脚本在哪里?看来你正在重写一个目录。

也许您还有其他需要进一步应用的重写规则,在这种情况下,您应该删除last rule [L]标志。拥有它使mod_rewrite停止应用规则。

如果您想检查您的查询是否被捕获,可以设置RewriteLogRewriteLogLevel指令来帮助您。

要快速检查,您还可以设置[R]标志,然后您就可以在浏览器中看到mod_rewrite发送给您的位置。

<强>更新 您的原始规则适用于我,目录中包含index.php文件,但您可以try using a RewriteBase来解决此问题:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /equipment/AlarisSystem/
RewriteRule /([^/]*)/([^/]*)$ index.php?manu=$1&model=$2 [L]

我认为该规则没有理由不起作用。您获得的原始错误可能与您重写的位置有关。这是来自根目录中的.htaccess文件。