將所有頁面重新導向到非 www,並將一頁重新導向到 www

將所有頁面重新導向到非 www,並將一頁重新導向到 www

我想將我的所有內部頁面(例如: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(臨時)重定向進行測試以避免潛在的快取問題。

相關內容