我有一個重寫規則來強制用戶從example.com到www.example.com. 這是出于 SEO 原因,因此我的 Google 結果中沒有重復的網站和內容。
# BEGIN Spark
AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
</IfModule>
<IfModule mod_deflate.c>
<FilesMatch "\.(html|php|txt|xml|js|css|ttf|otf|ico|json|svg|)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
# END Spark
我的問題。如果現在人們發布鏈接,example.com/news他們總是會像www.example.com. 我如何管理他們仍然可以使用和發布短網址,例如example.com/news1orexample.com/news2并且將分別重定向到www.example.com/news1or www.example.com/news2。
uj5u.com熱心網友回復:
你把規則放在錯誤的地方。它需要在內部重寫之前進行(到前端控制器:)index.php。例如。在檔案的頂部,而不是最后。
通過將其放在最后,它只會正確重定向物理目錄(包括主頁)和靜態資源(影像、CSS、JS 等)。通過前端控制器路由的所有其他“短 URL”將被重定向到index.php,您將看到“首頁”。
并且...為了避免在example.com使用包含尾隨斜杠的 URL 進行請求時出現雙重重定向,然后在尾隨斜杠洗掉規則中包含一個絕對 URL,并在此之后立即包含您的非 www 到 www 規則。
例如:
RewriteEngine On
# Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ https://www.example.com/$1 [L,R=301]
# Redirect non-www to www
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
# Front-controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
您需要在測驗之前清除瀏覽器快取,因為錯誤的 301(永久)重定向將被瀏覽器快取。(測驗 302 - 臨時 - 重定向以避免快取問題。)
旁白:另外一個問題是這些指令在一個# BEGIN Spark...# END Spark代碼塊中——這使得這些指令看起來好像是由某個自動化程序維護的?在哪種情況下,它們可能會被覆寫?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/361759.html
