我有一个问题,我一直在努力工作几个小时。我似乎无法按照自己的意愿行事。简单地说,我想将所有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:这是在扼杀我。答案 0 :(得分:2)
您的文件应如下所示:
RewriteCond %{REQUEST_URI} !/flashsale/newsletter/subscriber/unsubscribe/id/[\d]+/code/[a-z\d]+/? [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-z\d
)检查“a”到“z”的数字和字符。
<强>编辑:强>
我现在也进行了编辑。我已将unsubscribe
部分移至顶部。这将确保请求与给定字符串不匹配,并且所列出的任何IP地址都不会用于访问请求。
(请注意,我目前不在测试环境中。我的修改不能保证有效。)
答案 1 :(得分:0)
清除浏览器缓存并重新启动浏览器。然后尝试使用以下代码替换您的代码:
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
(永久重定向)。
答案 2 :(得分:0)
检查此扩展程序。它可能无法完全解决您的问题,但值得一试。
http://www.magentocommerce.com/magento-connect/optimise-web-mass-301-redirects-1589.html