2

我有一个问题,我一直在努力解决几个小时。我似乎也无法让它按照我想要的方式工作。简而言之,我想将所有 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:这是要了我的命。

4

3 回答 3

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]

解释:

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

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

编辑:

我现在也进行了编辑。我已将该unsubscribe部分移至顶部。这将确保请求与给定字符串不匹配,并且任何列出的 IP 地址都未用于访问请求。

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

于 2013-05-06T06:11:58.283 回答
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=302R=301. R=301在测试你的 mod_rewrite 规则时避免使用(永久重定向)。

于 2013-05-06T06:38:43.550 回答
0

检查这个扩展。它可能无法完全解决您的问题,但值得一试。

http://www.magentocommerce.com/magento-connect/optimise-web-mass-301-redirects-1589.html

于 2013-05-06T07:03:06.067 回答