.htaccess:将主域重定向到https:// www,子域重定向到https://(不带www)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.htaccess:将主域重定向到https:// www,子域重定向到https://(不带www)相关的知识,希望对你有一定的参考价值。

我知道在这里提供了无数的.htaccess解决方案,但没有一个重定向到https只有主域的www,但是没有https仅用于子域的www。基于this问题和php的解决方案,现在我想修改我的.htaccess文件以满足以下需求。

主域名:

  • http重定向到https
  • non-www重定向到www
  • (对于主域:www是理想的,应该出现)

子域:

  • http重定向到https
  • www重定向到non-www
  • (对于子域名:www不是理想的,不应该出现)

我目前的方法看起来像这样:

RewriteEngine on

# Ensure https for all domains (main- and subdomains):
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Redirect non-www to www only for main domain, but not for subdomains:
RewriteCond %{HTTP_HOST} ^(domain.com)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

# Redirect www to non-www only for subdomains:
RewriteCond %{HTTP_HOST} ^(www.)?subdomain.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^www. [NC]
RewriteRule ^ https://subdomain.domain.com%{REQUEST_URI} [R=301,L,NE]

  • 我认为子域有一些错误?
  • 我不理解第一个命令中的RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}部分:当没有https进入子域时,此命令是否将访问者发送到主域?或者{HTTP_HOST}是否已经包含可能的子域名?

注释:子域的内容与主域完全不同(例如,可以是private.website.com或cloud.website.com)。它不仅仅是一种不同的语言。因此,通过浏览器源或CMS创建内部转发似乎没有用。它应该只通过.htaccess-entry执行。

答案

对于子域部分,该规则是重复的,您应该修改为:

RewriteCond %{HTTP_HOST} ^www.subdomain.domain.com$ [NC]
RewriteRule ^ https://subdomain.domain.com%{REQUEST_URI} [R=301,L,NE]

对于这些规则:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

第1行:如果https关闭

第2行:对于任何模式,将用户永久重定向到https://%{HTTP_HOST}%{REQUEST_URI}%{HTTP_HOST}是从HTTP request header获得的,当用户提出请求domain.com时,%{HTTP_HOST}domain.com,而这个请求subdomain.domain.com%{HTTP_HOST}然后是subdomain.domain.com

以上是关于.htaccess:将主域重定向到https:// www,子域重定向到https://(不带www)的主要内容,如果未能解决你的问题,请参考以下文章

HTACCESS-将辅助域重定向到主域

htaccess Mod_Rewrite 从主域到子域

.htaccess 将域重定向到子目录而不更改 URL

如何使用 htaccess 将多个域重定向到除 1 个目录之外的另一个域?

Cloudflare从非主域重定向到Github页面

在 .htaccess 中使用 HTTPS 将旧域重定向到新域