簡體   English   中英

htaccess http到https重定向www和子域

[英]htaccess http to https redirect for www & sub domain

我目前有一個重定向,該重定向可將所有HTTP頁面重定向到http://www.的相應HTTPS頁面http://www. http://頁面,如下所示:

# redirect all pages to https://www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
# redirect http to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

我還需要包括對子域http://my.的重定向http://my. https://my.

如果我將重定向放在子域的.htaccess文件中,則它會受到www的.htaccess文件的干擾。

為了使以下各項起作用,我需要進行哪些更改:

  • 重定向所有http://www. http://頁面到其對應的https頁面
  • 重定向所有http://my. 頁面到其對應的https頁面

沒有一個弄亂另一個。

好的,所以mod_rewrite的問題是重寫規則:

RewriteCond %{HTTP_HOST} !^www\\. [NC]

將匹配所有以www開頭的內容。

這行的語法是:

RewriteCond {string to match} {regular expression to match} {other parameters}

就您而言,它表示:

匹配任何主機名( %{HTTP_HOST} )並非( ! )以( ^ )“ www。”開頭的URL。 (句點之前的反斜杠是因為句點在正則表達式中具有特殊含義-代表“任何字符”)。

最后的[NC]表示忽略大寫。

因此,.htaccess的第一部分

# redirect all pages to https://www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

說:

通過在前綴前面加上“ www。”來重寫其主機名不以“ www。”開頭的所有URL,包括“ me。”。

顯然,這會將me.whatever.com重寫為www.me.whatever.com。

要解決此問題,您需要添加另一個匹配規則以排除這種情況。

即: RewriteCond %{HTTP_HOST} !^me\\. [NC] RewriteCond %{HTTP_HOST} !^me\\. [NC]

因此,完整的.htaccess應為:

# redirect all pages to https://www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^me\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
# redirect http to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

因此,現在的重寫條件是:如果主機名不是以www開頭。 而且不是從我開始。然后在www前面加前綴。

這是一個不錯的測試器,可用於處理不同的解決方案: http : //htaccess.madewithlove.be/

要學習如何編寫這些文件,首先要學習正則表達式; 它們是任何技術專家工具包中必不可少的一部分!

祝好運 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM