我想要.htaccess
添加https
和添加www
到我的 URL 的代碼——但僅限于我的網站上線時,而不是當我在我的計算機上本地開發時。
我有以下
RewriteCond %{HTTP_HOST} !^localhost(?::\d )?$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(. )$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]
但這似乎并沒有添加www
我的網站何時上線。因此,例如https://example.com
沒有www
并且所有鏈接都已損壞。例如https://example.com/about
,只會收到 404 Not Found 錯誤訊息。
謝謝你的幫助。我不懂.htaccess
檔案/代碼。
編輯/更新
將代碼與其他代碼進行比較,應該是以下內容嗎?
RewriteCond %{HTTP_HOST} !^localhost(?::\d )?$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(. )$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
uj5u.com熱心網友回復:
將代碼與其他代碼進行比較,應該是以下內容嗎?
RewriteCond %{HTTP_HOST} !^localhost(?::\d )?$ [NC] RewriteCond %{HTTP_HOST} !^www\. [NC,OR] RewriteCond %{HTTPS} !on RewriteCond %{HTTP_HOST} ^(?:www\.)?(. )$ [NC] RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
是的。
您的原始規則明確洗掉了 www 子域。如果您已請求http://www.example.com/
(注意 HTTP),您將被重定向到https://example.com/
(HTTPS 非 www)。但是,如果請求https://www.example.com/
- 規范 URL(規則被跳過,因為第二個和第三個條件失敗),什么都不會發生。
%1
反向參考包含來自前面CondPattern中第一個捕獲組的匹配項。例如。給定CondPattern ^(?:www\.)?(. )$
然后%1
包含與(. )
(第一個捕獲組)匹配的任何內容,即。主機名,減去可選www.
前綴。
測驗%{HTTPS} off
或%{HTTPS} !on
- 結果是一樣的。
首先使用 302(臨時)重定向進行測驗,以避免潛在的快取問題。您需要在測驗之前清除瀏覽器快取,因為錯誤的重定向將被瀏覽器快取。
RewriteCond %{HTTP_HOST} !^localhost(?::\d )?$ [NC]
在這里檢查埠號似乎是不必要的。如果您localhost
在標準埠(80 或 443)上使用,這將失敗,因為埠號將從Host
標頭中省略。類似的東西!^localhost
就足夠了,或者!^localhost($|:)
如果你碰巧使用了一個以localhost
!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/505672.html