![如何让 mod_rewrite 强制重定向?](https://linux22.com/image/774254/%E5%A6%82%E4%BD%95%E8%AE%A9%20mod_rewrite%20%E5%BC%BA%E5%88%B6%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%9F.png)
我需要将我的网站临时重定向到 Cloudflare 上托管的静态版本。当前网站是托管在 Ionos 上的 Wordpress 网站,Wordpress 似乎正在执行从mydomain.com
到 的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 配置文件)可以强制重定向,就像我描述的那样?
答案1
我假设您网站的静态版本(位于static.example.com
)实际上是一个静态的非 WordPress 网站,因此本身无法解释任何重定向。
您发布的规则实际上并没有什么“错误”。但是...
先前的“WordPress”301(永久)重定向从非 www 到 www 将被浏览器(可能还有中间)缓存(永久)缓存。需要手动清除缓存,您的重定向才能
.htaccess
生效。您的重定向必须位于顶部
.htaccess
文件的前WordPress 代码块(重写到前端控制器),即。前注释标记# BEGIN WordPress
。如果您将重定向放在文件末尾(或 WordPress 代码块之后),则只会处理对静态资源(和目录)的请求。WordPress(虚拟)URL 将不会被重定向,因为请求已被重写为index.php
(WordPress 前端控制器)。
在旁边:
<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
。(如果是,A
那么也不可能。)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....