Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess htaccess重写排除不起作用_.htaccess_Magento_Rewrite - Fatal编程技术网

.htaccess htaccess重写排除不起作用

.htaccess htaccess重写排除不起作用,.htaccess,magento,rewrite,.htaccess,Magento,Rewrite,我有一个问题,我已经挣扎了几个小时了。我似乎也无法让它按我所希望的方式工作。简单地说,我想将所有url请求重定向到www.test.com.au,除了来自以下IP地址的请求或url中包含“/unsubscribe/”的任何请求 IP地址排除可以完美地工作。但是,尝试访问例如www.test.com.au/flashsale/newsletter/subscriber/id/8255/code/7iji5wv5hs8e3klvwwltlqy2bjmpmg5f/会重定向回/everytime,我不希

我有一个问题,我已经挣扎了几个小时了。我似乎也无法让它按我所希望的方式工作。简单地说,我想将所有url请求重定向到www.test.com.au,除了来自以下IP地址的请求或url中包含“/unsubscribe/”的任何请求

IP地址排除可以完美地工作。但是,尝试访问例如www.test.com.au/flashsale/newsletter/subscriber/id/8255/code/7iji5wv5hs8e3klvwwltlqy2bjmpmg5f/会重定向回/everytime,我不希望这样做

这是我打破的重写规则

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-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]
说明:

  • 第一个更改是添加了
    标志。您的原始代码没有这个
    mod_rewrite
    将自动采用
    标志,这意味着您的代码正在检查所有IP地址

  • 第二个变化涉及使用必要的通配符完全指定要检查的完整
    请求URI
    。第一个通配符(
    \d
    )检查数字,而第二个通配符(
    a-z\d
    )检查从“a”到“z”的数字和字符

  • 编辑:

    我现在也做了编辑。我已将
    取消订阅
    部分移到顶部。这将确保请求与给定字符串不匹配,并且列出的任何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_重写规则时,避免使用
    R=301
    (永久重定向)。

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


    真奇怪。在您的情况下,在
    id
    之前,您是否尝试过使用完整的URI?或者,使用必要的通配符修改整个URI?我已经修改了这一行几次,包括以下内容:
    ^/flashsale/时事通讯/订户/取消订阅(.)*[NC]
    运气不好@MikeAnthony我很肯定这条规则会导致所有问题,因为当我完全删除它时,URL会很好地命中。它不是
    (.)*
    ,而是
    (.*)
    用于0个或更多字符,或者
    (.+)
    用于1个或更多字符。谢谢你的快速响应,mike,但是上面的代码仍然不适用于我。规则仍在重新定向到
    /
    。我对.htaccess和regex还是很陌生,你到底怎么说?对不起,这会打破IP例外,你知道为什么吗?奇怪,这条规则打破了哪个IP?该站点应该是不可访问的,除非请求到列出的IP以及任何包含字符串unsubscribe的URI。当我通过代理测试站点时,它被加载,这意味着请求没有被重新定向回
    /
    ,我已经测试了这段代码。我可以知道您测试时的URL是什么吗?抱歉,Shatir,我需要一个.htaccess解决方案,因为规则已经定义。取消订阅的例外情况是新的修改。