Dot-Htaccess

我網站中的頁面既有http又有https,如何解決只有https?

  • June 15, 2020

我對 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文件:

完整的 .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指令在這裡不是絕對必要的。)

引用自:https://serverfault.com/questions/1021423