Dot-Htaccess

如何使 mod_rewrite 強制重定向?

  • January 25, 2022

我需要將我的網站臨時重定向到託管在 Cloudflare 上的靜態版本。目前站點是託管在 Ionos 的 Wordpress 站點,Wordpress 似乎正在執行從mydomain.comto的 301 重定向www.mydomain.com。我希望能夠通過轉到繼續訪問 Wordpress 實例,www.mydomain.com但如果我(或其他任何人)轉到mydomain.com我希望被重定向到static.mydomain.com.

我把它放在我的.htaccess文件中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain.com
RewriteCond %{HTTP_HOST} !^www.mydomain.com
RewriteRule ^(.*) https://static.mydomain.com/$1 [R=302,L]
</IfModule>

但是,當我訪問時,mydomain.com我仍然被重定向到www.mydomain.com,所以似乎 .htaccess RewriteRule 沒有被觸發,所以 Wordpress 正在執行它的重定向。

.htaccess 中是否有某種方式(我無權訪問 Apache 配置文件)來強制重定向,就像我描述的那樣?

我假設您網站的靜態版本 (at static.example.com) 實際上是一個靜態的非 WordPress 網站,因此它本身不能解釋任何重定向。

您發布的規則實際上沒有任何“錯誤”。然而, …

  1. 先前從非 www 到 www 的“WordPress”301(永久)重定向將被瀏覽器(可能還有中間)記憶體(永久)記憶體。這將需要手動清除以使您的重定向.htaccess生效。
  2. 您的重定向必須在WordPress 程式碼塊之前的文件頂部(重寫到前端控制器),即。評論標記之前。如果您將重定向放在文件末尾(或 WordPress 程式碼塊之後),則只會處理對靜態資源(和目錄)的請求。WordPress(虛擬)URL 不會被重定向,因為請求已經被重寫到(WordPress 前端控制器)。.htaccess``# BEGIN WordPress``index.php

在旁邊:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain.com
RewriteCond %{HTTP_HOST} !^www.mydomain.com
RewriteRule ^(.*) https://static.mydomain.com/$1 [R=302,L]
</IfModule>

稍微整理一下……您不需要重複該RewriteEngine On指令,因為它已經出現在文件後面的 WordPress 程式碼塊中。

您不需要<IfModule>包裝器。此重定向必鬚髮生,它不是可選的。

第二個條件RewriteCond指令)不是必需的。無需檢查HostisA和 not B。(如果是,A那麼它不可能B也是如此。)

因此,上述可以簡化為:

# Temporarily redirect domain apex to "static" subdomain
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*) https://static.example.com/$1 [R=302,L]

# BEGIN WordPress
: Other directives follow....

引用自:https://serverfault.com/questions/1090842