Dot-Htaccess
我網站中的頁面既有http又有https,如何解決只有https?
我對 HTTP 重定向有疑問:
我開始說我的首頁完美地將 HTTP 重定向到 HTTPS。我的所有頁面也都顯示 HTTPS,但是一旦我將 URL 與 HTTP 一起放置,或者僅使用
www.example.co.uk/page1
它就會轉到 HTTP 那個。例如:
https://example.co.uk/about-us/ http://example.co.uk/about-us/
我的
.htaccess
文件中已經有了這段程式碼:RewriteEngine on RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} (www\.)?example.co.uk RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
我已將其更改為我看到有人提到解決問題的程式碼:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
它仍然無法正常工作,兩者都有相同的問題。
**編輯#1:**我在我提到的程式碼之上還有另一個程式碼,它一直在那裡:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteCond %{HTTPS} off </IfModule>
**編輯#2:**我的完整
.htaccess
文件:
我在我提到的程式碼之上還有另一個程式碼
你把程式碼放錯地方了。您的 HTTP 到 HTTPS 重定向需要位於文件頂部的現有程式碼之前
.htaccess
。通過將重定向放在上述程式碼之後,除了首頁(根目錄)或現有文件/目錄之外,它不會被處理。因此,為什麼您只看到首頁的重定向。
您無需重複該
RewriteEngine
指令。最後還有一個多餘的
RewriteCond
指令應該被刪除。換句話說,您
.htaccess
應該如下所示:# Redirect HTTP to HTTPS RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Front-controller <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
雖然,除非這是 WordPress 並且您也有
# BEGIN WordPress
/# END WordPress
註釋標記,否則<IfModule>
包裝器是不必要的,並且如果像這樣重寫將更具可讀性:RewriteEngine On RewriteBase / # Redirect HTTP to HTTPS RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Front-controller RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L]
請注意,我刪除了最後一個
RewriteRule
替換字元串上的斜杠前綴。(這就是RewriteBase
指令的用途。雖然RewriteBase
指令在這裡不是絕對必要的。)