0

我正在尝试使用 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]

我想从 tohttp://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并且这条规则可以正常工作。

4

1 回答 1

1

您的规则似乎正确,但您可能没有重写到正确的位置。您要重写的脚本在哪里?看来您正在重写目录。

也许你有额外的重写规则需要进一步应用,在这种情况下,你应该去掉最后一个规则[L] 标志。让它在那里使 mod_rewrite 停止应用规则。

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

为了快速检查,您还可以设置 [R] 标志,然后您将能够在浏览器中看到 mod_rewrite 将您发送到的位置。

更新: 你原来的规则适用于我目录中的 index.php 文件,但也许你可以尝试使用 RewriteBase来解决这个问题:

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

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

于 2012-06-06T19:42:21.477 回答