尝试从非https重定向到https,但仅在htaccess中的www子域上

时间:2018-11-15 11:04:23

标签: .htaccess

我正在尝试创建一个HTACCESS文件,该文件将具有以下规则。我正在尝试使用各种在线指南将一个htaccess文件拼凑在一起,但有一点问题。

我想从http重定向到https。 我想从非www重定向到www。 我希望能够跟踪标准http上的所有子域。

最后一部分是我苦苦挣扎的部分。其他两个规则工作正常。但是,当我尝试访问http://demo.example.com时,它会重定向到我不希望它执行的https。

如何创建某种IF语句或使之工作?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
</IfModule>

1 个答案:

答案 0 :(得分:0)

您可以在网站根.htaccess中使用此单个规则:

RewriteEngine On

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(example\.com)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]

请确保将此规则保留为您的最高规则,并在新的浏览器中进行测试以避免旧的缓存。

详细信息:

规则主体中有4行。这是详细信息:

  1. 第1行是一个OR条件,如果HTTPS未开启,则返回true
  2. 第2行是另一个条件,如果域名中没有www,则返回true。此规则的前两个条件之一必须为真。
  3. 第3行是另一个条件,如果当前域名是www.example.comexample.com,则返回true,因为以wwww开头是可选的。它还在向后引用example.com中捕获%1
  4. 第4行是RewriteRule,它重定向到https://www.%1%{REQUEST_URI},其中%{REQUEST_URI}是当前请求URI,而%1是值example.com,我们在第3行中捕获。 li>