Dot-Htaccess
如何使 mod_rewrite 強制重定向?
我需要將我的網站臨時重定向到託管在 Cloudflare 上的靜態版本。目前站點是託管在 Ionos 的 Wordpress 站點,Wordpress 似乎正在執行從
mydomain.com
to的 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 網站,因此它本身不能解釋任何重定向。您發布的規則實際上沒有任何“錯誤”。然而, …
- 先前從非 www 到 www 的“WordPress”301(永久)重定向將被瀏覽器(可能還有中間)記憶體(永久)記憶體。這將需要手動清除以使您的重定向
.htaccess
生效。- 您的重定向必須在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
指令)不是必需的。無需檢查Host
isA
和 notB
。(如果是,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....