![](/img/trans.png)
[英]Using htaccess to redirect http://www, http:// and https://www to https:
[英]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.