.htaccess mod_rewrite - 不匹配的模式

时间:2012-10-29 03:50:52

标签: apache .htaccess mod-rewrite

我无法使非匹配(否定)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/

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

感谢大家的回答和想法。我终于找到了这个问题,所以这里有详细信息,希望它可以帮助其他人走上正轨。

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

这些附加规则将Clean URL重写为GET请求。我(%)的印象是%{REQUEST_URI}还包含固定在URL末尾的GET变量。它没有。您必须使用%{QUERY_STRING}来分别检查GET查询字符串的内容。

Mod-Rewrite Logging对于帮助我调试此问题非常有用。我无法在我们的live / production cPanel服务器上启用它,因此我在我的PC上安装了XAMPP,启用了日志记录并在本地使用重写规则,直到我开始工作。