我有一个问题,我已经挣扎了几个小时了。我似乎也不能按我想的那样让它工作。简单地说,我想把所有的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]
解释:
第一个变化是增加了
OR
标志。您的原始代码没有这个。mod_rewrite
将自动假定为AND
标志,这意味着您的代码正在检查所有IP地址。第二个更改涉及使用必要的通配符完全指定要检查的完整
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