1

我无法让不匹配(否定)的 mod_rewrite 模式正常工作。

在下面的示例中,我希望将所有请求重定向到“/promo-page”,但是,不允许重定向循环(因此是 RewriteCond)。

### Request URL: http://example.com/promo-page ###
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !/promo-page
RewriteRule .* /promo-page [R=302,L]

当发出“/promo-page”请求时,会忽略 RewriteCond 规则并发生重定向循环。

为什么感叹号(!)不起作用的任何想法?语法不正确吗?

提前致谢。

更新

我还在在线 mod_rewrite 测试器中尝试了这些规则,但它们也不起作用(如果您使用“home”作为 URL,使用“/home”作为 REQUEST_URI)。

http://martinmelin.se/rewrite-rule-tester/

4

2 回答 2

0

删除RewriteCond %{REQUEST_URI} !^/$- 正如乔恩所说,这将永远是真的。

于 2012-10-29T05:06:49.580 回答
0

感谢大家的回答和想法。我终于找到了这个问题,所以这里是细节,希望它可以帮助其他人。

令人困惑的是 .htaccess 文件中的更多规则。这些没有发布在我原来的问题中,因为我不相信它们是相关的,甚至会影响结果。

这些附加规则将 Clean URL 重新写入 GET 请求。我的(错误)印象是 %{REQUEST_URI} 还包括附加到 URL 末尾的 GET 变量。它没有。您必须使用 %{QUERY_STRING} 单独检查 GET 查询字符串的内容。

Mod-Rewrite Logging 在帮助我调试这个问题方面非常有用。我无法在我们的实时/生产 cPanel 服务器上启用它,所以我在我的 PC 上安装了 XAMPP,启用了日志记录并在本地使用重写规则,直到我让它工作为止。

于 2012-11-05T00:28:17.070 回答