htaccess重写排除不起作用

时间:2013-05-06 03:59:43

标签: .htaccess magento rewrite

我有一个问题,我一直在努力工作几个小时。我似乎无法按照自己的意愿行事。简单地说,我想将所有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:这是在扼杀我。

3 个答案:

答案 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]

<强>解释

  1. 第一个更改是添加OR标志。你的原始代码没有这个。 mod_rewrite会自动采用AND标记,这意味着您的代码正在检查所有IP地址。

  2. 第二项更改涉及使用必要的外卡完全指定要检查的完整REQUEST_URI。第一张外卡(\d)检查数字,而第二张(a-z\d)检查“a”到“z”的数字和字符。

  3. <强>编辑:

    我现在也进行了编辑。我已将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