2012-10-29 43 views
1

我无法获得不匹配(否定)mod_rewrite模式的工作。.htaccess 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规则将被忽略并发生重定向循环。

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

在此先感谢。

UPDATE

我也是在网上mod_rewrite的测试尝试了这些规则,他们也没有工作(如果你使用“家”的网址和“/家”为REQUEST_URI)。

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

+2

这些规则适用于我,但您的第一个条件将始终为真,因为'%{REQUEST_URI}'var将永远不会为空(它将是'^/$')。 –

+0

好的电话乔恩。我更新了我的帖子以反映这一点。奇怪的规则为你工作好吗......?也许还有别的东西会导致这些问题? – Wireblue

回答

0

非常感谢您的回答和想法。我终于找到了这个问题,所以这里的细节可以帮助其他人走上正轨。

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

这些附加规则会将干净URL重写为GET请求。我认为%{REQUEST_URI}也包含加到URL末尾的GET变量。它没有。您必须使用%{QUERY_STRING}分别检查GET查询字符串的内容。

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

0

删除RewriteCond %{REQUEST_URI} !^/$ - 它永远是真实的,因为乔恩说。

+0

我希望如果他们要求“/”(例如//example.com/)就不会。 – Wireblue