【问题标题】:Avoid redirect chaining for https non www. htacess避免 https 非 www 的重定向链接。 htaccess
【发布时间】:2021-11-30 21:35:10
【问题描述】:

在 Google 和各种论坛上进行无休止的搜索后,我找不到在没有任何链的情况下正确重定向网站的方法。是否可以重定向到单个 url 并避免链接?以下是我目前正在使用的代码

RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* – [F,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

目前这似乎会产生 2 或 3 个重定向,例如 http://example.co.uk/example-page/ 被重定向到:

  • http://www.example.co.uk/example-page/
  • https://www.example.co.uk/example-page/

或者,如果您不包含尾部斜杠 http://example.co.uk/example-page,它将转到:

  • http://example.co.uk/example-page/
  • http://www.example.co.uk/example-page/
  • https://www.example.co.uk/example-page/

是否可以直接转到https://www.example.co.uk/example-page/,无论我们是否包含斜杠,包括或不包括www。或 http 或什么是写这个的最佳方式?

我对 htaccess 文件的了解非常有限,但我很想了解这一切是如何工作的以及如何实现。

【问题讨论】:

    标签: loops .htaccess redirect chain


    【解决方案1】:

    您看到的输出与发布的.htaccess 指令不一致,因此您可能会看到缓存的响应。确保您的浏览器缓存在测试前已清除,并使用 302(临时)重定向进行测试以避免潜在的缓存问题。

    例如,在您的两个示例的输出中,非 www 到 www 重定向不会更改协议(即,它从 http://example 重定向到 http://www.example)。但是,.htaccess 中的指令明确包含https:// 协议。因此,要么是其他原因触发了此重定向,要么您看到的是先前尝试的缓存响应?

    此外,您的两个示例都在最后一次重定向中从 HTTP 重定向到 HTTPS。但是,您发布的 .htaccess 指令中没有 HTTP 到 HTTPS 重定向。在.htaccess 完成后,此重定向可能由您的应用程序触发。

    将重定向数量减少到一个,您需要在附加斜杠的第一个重定向中明确包含协议+规范主机名。

    例如:

    # Append trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule [^/]$ https://www.example.co.uk%{REQUEST_URI}/ [L,R=301,NE]
    
    # Redirect Non-www to www + HTTPS
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
    
    # Redirect HTTP to HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    HTTP 到 HTTPS 重定向假定 SSL 证书直接安装在您的应用程序服务器上,并且您没有使用前端代理/CDN/负载平衡器等。

    另一个相关问题:run second Rewrite condition and rule after the first rule is executed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-04
      • 2014-07-26
      • 1970-01-01
      • 2017-05-03
      • 2018-11-12
      • 2013-07-01
      • 1970-01-01
      • 2011-01-02
      相关资源
      最近更新 更多