1 回答

TA貢獻1831條經(jīng)驗 獲得超10個贊
我是否正確地認(rèn)為這段代碼會強制刪除www.
是的,但僅適用于 HTTP(而非 HTTPS)請求,由第一個條件控制%{HTTPS} !=on。
如果您正在實施 HTTPS,那么您應(yīng)該刪除第一個條件并將RewriteRule 替換字符串更改為重定向到https://.... 但如果您想重定向到,www那么您還需要反轉(zhuǎn)邏輯:
# Redirect "example.com -> www.example.com"
# (In fact, redirect hostname that does not start "www.")
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
不過,如果您有其他子域,這種特殊方法(正如我在評論中暗示的那樣)不一定有效,除非您希望所有子域都有 www 子子域?!
請注意,這是外部“重定向”,而不是您在評論中所述的內(nèi)部“重寫”。
如果是這樣 - 這真的是最佳實踐嗎?
從SEO角度還是從技術(shù)角度?在 SEO 方面沒有區(qū)別。使用www子域可以說具有一些技術(shù)優(yōu)勢(隔離 cookie 和臨時站點等) - 盡管這主要是一個意見問題并且取決于您的環(huán)境。這真的取決于你。對于某些域名,使用www子域看起來很麻煩。
但重要的是您選擇其中之一并重定向到規(guī)范 URL,以避免潛在的重復(fù)內(nèi)容問題。
使用域頂點(即沒有 www 子域)只是 CodeIgniters默認(rèn)的。
對每個 URL 強制使用 https - 但如果我使用它會導(dǎo)致錯誤www.
為了澄清,您實施的 SSL 證書必須包括域頂點,即。exmaple.com和 www 子域,即。www.example.com。否則,在請求“其他”(非 SSL)主機名時,您自然會收到瀏覽器安全警告。
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
此代碼通常可以強制 HTTP 到 HTTPS(前提是您的應(yīng)用程序服務(wù)器上安裝了 SSL 證書,即您沒有使用前端 SSL 代理或非標(biāo)準(zhǔn)實現(xiàn))。但是,您將此規(guī)則與上述規(guī)則相關(guān)的順序取決于您是否打算實施HSTS 。
如果您打算實施 HSTS,那么您需要先重定向到同一主機上的 HTTPS ,然后再重定向到 www。當(dāng)請求非規(guī)范時,這將導(dǎo)致不可避免的雙重重定向http://example.com/(但這并不是“壞”)。
例如:
# 1. Redirect to HTTPS on the same host
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. Redirect to non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
但是,如果您不打算實施 HSTS,那么您可以顛倒上述兩條規(guī)則,并為任何非規(guī)范 URL 請求最多獲得一個重定向。
您需要更新 CodeIgniterbase_url以匹配您對 www 的偏好。
- 1 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報