【问题标题】:HTTPS to HTTP redirect doesn't keep custom URLHTTPS 到 HTTP 重定向不保留自定义 URL
【发布时间】:2013-11-07 04:06:16
【问题描述】:

假设我有一个名为:www.example.com/today.php?id=123 的域名。我使用以下代码将其重定向到 url www.example.com/yes/123/some-name

Rewrite Rule ^yes/123/some-name$ today.php?id=123

但现在我想让该链接在从 https 调用时始终重定向到 http。因此,我尝试添加以下代码:

RewriteCond %{HTTPS} on
Rewrite Rule ^today\.php(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]

发生的情况是它被重定向到 http,但使用以下 url:www.example.com/today.php?id=123 而不是保留原始的 www.example.com/yes/123/some-name。我做错了什么?

谢谢!

【问题讨论】:

    标签: php regex .htaccess mod-rewrite https


    【解决方案1】:

    更改规则顺序:

    RewriteEngine On
    
    RewriteCond %{HTTPS} on
    RewriteRule ^yes/[^/]+/.*$ http://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R=301]
    
    RewriteRule ^yes/[^/]+/.*$ today.php?id=123 [L,QSA,NC]
    

    一般来说,在重写规则之前先保留你的 301 规则。

    【讨论】:

      【解决方案2】:

      您需要确保您的重定向内部路由的规则之前。您需要匹配清理后的 URL 而不是内部映射的 URL。所以像:

      RewriteCond %{HTTPS} on
      RewriteRule ^yes/[0-9]+/ http://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]
      
      RewriteRule ^yes/123/some-name$ today.php?id=123 [L]
      

      【讨论】:

      • 成功了!!谢谢!但是,当链接中没有变量时,为什么它会反过来工作呢?我只是很好奇,因为我对其他简单的网址有相反的看法,而且它们工作得很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2018-04-17
      相关资源
      最近更新 更多