我想將我的所有內部頁面(例如:example.com/about
)重定向到其非 www 版本,但我希望我的主頁 ( https://example.com
) 重定向到其 www 版本 ( https://www.example.com
)。
我在網路上搜尋了很多文章,但都無法實現。
如果設定這兩個規則,則內部頁面可以正常重定向,但主頁會陷入循環。
我不知道如何編碼,所以請請求您是否可以編寫我應該貼上到我的.htaccess
文件中的程式碼
目前,我已使用以下程式碼將所有頁面設定為重定向到其非 www 版本(甚至主頁):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>
# BEGIN Sitepad
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END Sitepad
答案1
我在網路上搜尋了很多文章,但都無法實現。
可能是因為這是一個奇怪的要求。如果您能找到任何可以簡單複製/貼上執行此操作的程式碼,我會感到驚訝。
但是,假設您正在為所有內部連結建立正確的絕對 URL(因為您不能在內部連結到重新導向的 URL),那麼.htaccess
如果您了解現有指令,則實作起來相對簡單。
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
.*
中的正規表示式RewriteRule
圖案火柴一切。具體來說,它匹配 0 個或多個任意字符,如量詞所示*
。它會匹配空 URL 路徑(即「首頁」)和每個非空 URL 路徑(即其他所有內容)。
您需要變更上述正規表示式,使其符合非空 URL 路徑(即除主頁之外的所有內容)。並建立另一個僅符合空 URL 路徑的規則(在另一個方向)。
index.php
(這利用了 mod_dir 正在為主頁請求提供服務的事實,而不是後面的 mod_rewrite 指令。)
要配對 1 個或多個(即非空 URL 路徑),您可以使用+
(加號)量詞,而不是*
(星號/星號)。
例如:
# Redirect everything except the homepage (from www to non-www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.+)$ https://example.com/$1 [L,R=301]
# Redirect the homepage only (from non-www to www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]
在測試之前,您需要清除瀏覽器緩存,因為先前將主頁從 www 重定向到非 www 的 301(永久)重定向已被瀏覽器快取。
首先使用 302(臨時)重定向進行測試以避免潛在的快取問題。