Htaccess重写排除不起作用



我有一个问题,我已经挣扎了几个小时了。我似乎也不能按我想的那样让它工作。简单地说,我想把所有的url请求重定向到www.test.com.au,除了那些来自下面的IP地址或任何在url中有"/unsubscribe/"的请求。

IP地址排除工作完美。但是,试图达到例如www.test.com.au/flashsale/newsletter/subscriber/unsubscribe/id/8255/code/7iji5wv5hs8e3klvwwltlqy2bjmpmg5f/每次都重定向回/,我不希望它。

这是我破碎的重写规则

RewriteCond %{REMOTE_ADDR} !^110.174.129.147
RewriteCond %{REMOTE_ADDR} !^203.217.17.162
RewriteCond %{REMOTE_ADDR} !^111.67.4.233
RewriteCond %{REQUEST_URI} !/unsubscribe/ [NC]
RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif) [NC]
RewriteRule .* / [R=301,L]

我哪里错了?

PS:这简直要杀了我。

你的文件应该是这样的:

RewriteCond %{REQUEST_URI} !/flashsale/newsletter/subscriber/unsubscribe/id/[d]+/code/[a-zd]+/? [NC]
RewriteCond %{REMOTE_ADDR} !^110.174.129.147 [OR]
RewriteCond %{REMOTE_ADDR} !^203.217.17.162 [OR]
RewriteCond %{REMOTE_ADDR} !^111.67.4.233 [OR]
RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif)$ [NC]
RewriteRule ^ / [R=301,L]

解释:

  1. 第一个变化是增加了OR标志。您的原始代码没有这个。mod_rewrite将自动假定为AND标志,这意味着您的代码正在检查所有IP地址。

  2. 第二个更改涉及使用必要的通配符完全指定要检查的完整REQUEST_URI。第一个通配符(d)检查数字,而第二个通配符(a-zd)检查从'a'到'z'的数字和字符。

编辑:

我现在也做了一个编辑。我已经将unsubscribe部分移动到顶部。这将确保请求与给定的字符串不匹配,并且列出的任何IP地址都不会被用来访问请求。

(请注意,我现在不在测试环境中。我的修改不能保证有效

清空浏览器缓存并重新启动浏览器。然后尝试用以下代码替换您的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^(110.174.129.147|203.217.17.162|111.67.4.233)
RewriteCond %{REQUEST_URI} !/unsubscribe/ [NC]
RewriteCond %{REQUEST_URI} !.(jpe?g|png|gif)$ [NC]
RewriteRule ^.+$ / [R=302,L]

一旦您确认它工作正常,将R=302替换为R=301。在测试mod_rewrite规则时,避免使用R=301(永久重定向)。

检查此扩展。这也许不能完全解决你的问题,但值得一试。

http://www.magentocommerce.com/magento - connect/optimise - web -质量- 301重定向- 1589. - html

最新更新