以下規則正在完成我想要的,即 www 到非 www 和 http 到 https,但是,我還有兩個問題:
尾部斜杠應添加到所有頁面(以任何型別的修飾符結尾的頁面除外,例如 /page#foo、page/foo.jpg 等。
這是我的 .htaccess 檔案中的當前規則
RewriteEngine On
RewriteCond %{HTTP_HOST} !=localhost
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
uj5u.com熱心網友回復:
下面的規則正在完成我想要的,即 www 到非 www和 http 到 https
您發布的規則并未專門將 HTTP 重定向到 HTTPS,因為它不會重定向http://example.com/(HTTP 非 www)請求。如果您看到此重定向,則說明正在執行其他操作。
RewriteCond %{HTTP_HOST} !=localhost RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
順便說一句,檢查標頭是否不存在的第一個條件是完全多余的,因為如果第二個條件為真,則該條件必須為真。這兩個條件是相互包容的。Hostlocalhost
尾部斜杠應添加到所有頁面(以任何型別的修飾符結尾的頁面除外,例如
/page#foo,,page/foo.jpg等)
由于 URL 的這一部分(即。)沒有作為 HTTP 請求的一部分發送到服務器,因此無法檢測到片段識別符號(又名hash)(即fooin /page#foo) 。URL的一部分僅由客戶端代碼/JavaScript 使用。就服務器而言,和之間沒有區別。如果這對您來說是個問題,那么您不能強制在. 但是,尾部斜杠將在之后添加(如果這是您的想法),即。將被重定向到,所以這應該不是問題。.htaccess#foo#foo/page#foo/page.htaccess/page/page#foo/page#foo/page/#foo
您可以在現有規則之前添加以下規則,就在RewriteEngine指令之后:
# Append trailing slash to URL-path if omitted unless it looks like an actual file
RewriteCond $1 !\.\w{2,4}$
RewriteCond %{HTTP_HOST} ^(?:www\.)?(. ?)\.?$ [NC]
RewriteRule ^(.*[^/])$ https://%1/$1/ [R=301,L]
該RewriteRule 模式 ^(.*[^/])$匹配任何尚未以斜杠結尾的 URL 路徑。然后在$1反向參考中捕獲 URL 路徑。第一個條件(RewriteCond指令)然后檢查 URL 路徑不以看起來像檔案擴展名的內容結尾(即,一個點后跟 2 到 4 個字母數字大寫/小寫字符)。然后第二個條件只捕獲域名減去任何可選www.前綴,并將其保存在%1反向參考中。
這也會重定向到 HTTPS 和非 www 域名,因此它通過以下規則避免了潛在的第二次重定向。
首先使用 302(臨時)重定向進行測驗,以避免潛在的快取問題。
如果您在 localhost 上進行測驗并且 localhost 不支持 HTTPS,則如下修改規則以便僅在 localhost 上保留 HTTP。例如:
RewriteCond $1 !\.\w{2,4}$
RewriteCond %{HTTP_HOST} ^()(localhost)$ [OR]
RewriteCond s%{HTTP_HOST} ^(s)(?:www\.)?(. ?)\.?$ [NC]
RewriteRule ^(.*[^/])$ http%1://%2/$1/ [R=301,L]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/434003.html
