Tuckey 过滤器 - https 重定向

Posted

技术标签:

【中文标题】Tuckey 过滤器 - https 重定向【英文标题】:Tuckey Filter - https redirect 【发布时间】:2014-10-05 11:43:30 【问题描述】:

我正在尝试进行从 http 到 https 的 301 重定向。

当我使用这个规则时,我得到一个无限循环重定向到https://localhost/mypage

<rule>
  <name>https redirect</name>
  <condition name="scheme" operator="notequal">^https$</condition>   
  <from>^/(.*)</from>
  <to type="permanent-redirect" last="true">https://localhost/$1</to>
</rule>

当我使用这个时,根本不会发生重定向

<rule>
  <name>https redirect</name>
  <condition name="scheme" operator="equal">^http$</condition>   
  <from>^/(.*)</from>
  <to type="permanent-redirect" last="true">https://localhost/$1</to>
</rule>

由此我猜测我写的方案条件是错误的,但我找不到写规则的正确方法,我尝试了:

<condition name="scheme" operator="equal">^http$</condition> 
<condition name="scheme" operator="equal">http</condition> 

关于为什么这不起作用的任何线索?

【问题讨论】:

【参考方案1】:

尝试:

<rule>
  <name>https redirect</name>
  <condition name="scheme" operator="equal">http$</condition>   
  <from>^/(.*)</from>
  <to type="permanent-redirect" last="true">https://localhost/$1</to>
</rule>

【讨论】:

【参考方案2】:

这行得通:

<rule>
    <name>https redirect</name>
    <condition type="scheme" operator="notequal">https</condition>   
    <from>^/(.*)</from>
    <to type="permanent-redirect" last="true">https://yourdomain.com/$1</to>
</rule>

【讨论】:

您能否详细说明为什么原始帖子不起作用或您的解决方案解决了哪些具体问题? 我用当前版本 4.0.3 的 Tuckey 重写过滤器测试了上述解决方案,它没有用,但它有效。【参考方案3】:

我想提出以下建议

<rule>
    <name>https redirect</name>
    <condition name="scheme" operator="equal">^http$</condition>   
    <from>^/(.*)</from>
    <to type="permanent-redirect" last="true">https://localhost/$1</to>
</rule>

我在Google Groups找到了上述建议。

但是,我在 java 插件中使用了不同的 Tuckey 过滤器。这是我添加规则的方式。

    //Add https redirect for example.com
    NormalRule myruleredirect3 = new NormalRule();
    myruleredirect3.setFrom("^/(.*)");
    myruleredirect3.setTo("https://example.com/$1");
    myruleredirect3.setToType("permanent-redirect");

    //Create a Condition for this rule
    Condition myruleredirect3condition = new Condition();
    myruleredirect3condition.setName("scheme");
    myruleredirect3condition.setType("scheme");
    myruleredirect3condition.setValue("^http$");
    myruleredirect3condition.setOperator("equal");
    myruleredirect3.addCondition(myruleredirect3condition);

    //Create a Condition for this rule
    Condition myruleredirect3condition2 = new Condition();
    myruleredirect3condition2.setName("host");
    myruleredirect3condition2.setValue("example.com");
    myruleredirect3condition2.setType("header");
    myruleredirect3condition2.setOperator("equal");
    myruleredirect3.addCondition(myruleredirect3condition2);

    //Register the tuckey rewrite rule
    addRewriteRule(myruleredirect3);

【讨论】:

【参考方案4】:

你可以这样做

将属性 scheme 替换为 header ,然后删除属性 last

<rule>
  <name>https redirect</name>
  <condition name="header" operator="notequal">^https$</condition>   
  <from>^/(.*)</from>
  <to type="permanent-redirect" >https://localhost/$1</to>
</rule>

如果循环问题仍然存在,也许你应该 查看拦截器/过滤器处理程序中的代码级别 您可能有条件重定向到那里!或在服务器上 域名提供商的级别规则。

【讨论】:

以上是关于Tuckey 过滤器 - https 重定向的主要内容,如果未能解决你的问题,请参考以下文章

charles请求过滤、重定向、弱网测试

JSF过滤器在初始重定向后不重定向[关闭]

spring重定向设置请求头header

从动作过滤器属性重定向

Laravel 安全重定向过滤器在我的本地工作,但不在服务器上

Servlet过滤器登录重定向无限循环[重复]