我想將非 www 的 URL 重定向到 www。我example.com在子目錄 `example.com/sub 中有一個主要的 wordpress 網站和另一個網站
從重定向https://example.com到https://www.example.com作品但從重定向https://example.com/sub到https://www.example.com/sub沒有。
主要HTaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
子訪問
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sub/
RewriteCond %{HTTPS} on [OR]
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule .* - [E=WPR_SSL:-https]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule .* - [E=WPR_ENC:_gzip]
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} =""
RewriteCond %{HTTP:Cookie} !(wordpress_logged_in_. |wp-postpass_|wptouch_switch_toggle|comment_author_|comment_author_email_) [NC]
RewriteCond %{REQUEST_URI} !^(/sub(/(. /)?feed/?. /?|/(?:. /)?embed/|/(index\.php/)?wp\-json(/.*|$)))$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^(facebookexternalhit).* [NC]
RewriteCond "%{DOCUMENT_ROOT}/sub/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}%{ENV:WPR_WEBP}.html%{ENV:WPR_ENC}" -f
RewriteRule .* "/sub/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}%{ENV:WPR_WEBP}.html%{ENV:WPR_ENC}" [L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /sub/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sub/index.php [L]
</IfModule>
uj5u.com熱心網友回復:
這與最近提出的這個問題非常相似:.htaccess redirect entire site from non-www/http to www/https
當問題是針對每個目錄的.htaccess檔案時,您可以使用該[END]標志來阻止這些檔案中的規則在某些規則之后運行。從檔案:
使用該
[END]標志不僅可以終止當前輪次的重寫處理(如[L]),還可以防止在每個目錄 (htaccess) 背景關系中發生任何后續的重寫處理。
所以你應該能夠[END]在你的規則中使用,使它們優先于子目錄中的其他規則:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,END]
uj5u.com熱心網友回復:
.htaccess不處理根檔案中的非 www 到 www 重定向,因此重定向永遠不會發生。
mod_rewrite 指令不是繼承的(默認情況下),因此當您請求時https://example.com/sub/,mod_rewrite 指令/sub/.htaccess完全覆寫父指令(即非 www 到 www 的重定向)并且父指令甚至不會被處理,因此不會發生重定向。(在這種情況下,如果父指令確實得到處理,那么您的網站無論如何肯定會中斷。??)
您需要在檔案中重復非 www 到 www 的重定向/sub/.htaccess。但是,您不能在子目錄中使用完全相同的規則(使用反向參考),因為您將從/sub重定向中丟失該目錄。您需要改用REQUEST_URI服務器變數。
例如,在/sub/.htaccess檔案的頂部:
# /sub/.htaccess
# Redirect non-www to www
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
請注意,REQUEST_URI服務器變數包含斜杠前綴,因此從替換字串中省略了斜杠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/358467.html
