【问题标题】:How to redirect one domain to another, non-www to www, and enforce SSL with .htaccess file如何将一个域重定向到另一个域,将非 www 重定向到 www,并使用 .htaccess 文件强制执行 SSL
【发布时间】:2019-03-06 00:32:36
【问题描述】:

我希望在我的 .htaccess 文件中处理 3 个重写任务:

  1. 将 example1.com 重定向到 example2.com
  2. 将非 www 重定向到 www
  3. 将 http 重定向到 https

是的,我知道所有这些问题都已在此处单独提出和回答,但我正在尝试了解如何将这些答案组合在一起以实现最有效的重写。此外,当我尝试对这些 #1 或 #2 或 #3 中的每一个实施单独的重写时,它们会相互冲突并将我送入重定向循环。

我能找到的最接近的是 Amine HayyoussefRedirect multiple domains to folder + non-www to www

# redirect non-www to www
ReWriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301]

ReWriteCond %{HTTP_HOST} ^www.domain.com [OR]
ReWriteCond %{HTTP_HOST} ^www.domain.co.uk [OR]
ReWriteCond %{REQUEST_URI} !domain/
ReWriteRule ^(.*)$ domain/$1 [L]

这是我目前在 .htaccess 文件中的内容:

# Redirect example1.com to www.example2.com
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteRule ^(.*)$ https://www.example2.com [R=301,L]

# Redirect www.example1.com to www.example2.com
RewriteCond %{HTTP_HOST} ^www.example1\.com$ [NC]
RewriteRule ^(.*)$ https://www.example2.com [R=301,L]

# Force non-www to www
RewriteCond %{HTTP_HOST} ^example2.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]

问题在于,当导航到 http://www.example2.com 时,它无法重写任何内容,而它应该强制执行 SSL 并重写到 https://www.example2.com

最终,我确信有一种更简洁的方法可以使用更高效的代码来解决所有 3 次重写问题。对组合这些逻辑位或将它们分开以便于维护的建议感兴趣。

谢谢!

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    所有 3 个重定向都可以在一个重定向规则中完成:

    RewriteEngine On
    
    RewriteCond %{REQUEST_SCHEME} =http
    RewriteRule ^ https://www.example2.com%{REQUEST_URI} [R=301,L,NE]
    
    RewriteCond %{HTTP_HOST} ^(?:www\.)?example1\.com$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^example2\.com$ [NC]
    RewriteRule ^ https://www.example2.com%{REQUEST_URI} [R=301,L,NE]
    

    确保这是最重要的规则,并在新浏览器中对其进行测试。

    这假定example1.comexample2.com 位于同一主机上并指向同一目录。

    【讨论】:

    • 这几乎可以工作。我能找到的唯一边缘情况是example2.com 不会重定向到example2.com
    • 您更新的代码导致错误:重定向过多。它似乎创建了一个无限循环。
    • Apache 2.4.34,不从代理后面连接
    • 完成(网络日志:imgur.com/a/4DFUR2n),它似乎是 www.firstperson.is 上的 301。从角度来看,您代码中的 example2.com 是生产环境中的 firstperson.is。
    • 仍然得到相同的 301 重定向重定向循环。
    猜你喜欢
    • 2016-12-23
    • 2014-06-27
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多