首页 文章

.htaccess mod_rewrite - 不匹配的模式

提问于
浏览
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规则并发生重定向循环 .

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

提前致谢 .

UPDATE

我也在一个在线mod_rewrite测试器中尝试过这些规则,它们也不起作用(如果你使用“home”作为URL而“/ home”作为REQUEST_URI) .

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

2 回答

  • 0

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

  • 0

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

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

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

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

相关问题