如何让 mod_rewrite 强制重定向?

如何让 mod_rewrite 强制重定向?

我需要将我的网站临时重定向到 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 网站,因此本身无法解释任何重定向。

您发布的规则实际上并没有什么“错误”。但是...

  1. 先前的“WordPress”301(永久)重定向从非 www 到 www 将被浏览器(可能还有中间)缓存(永久)缓存。需要手动清除缓存,您的重定向才能.htaccess生效。

  2. 您的重定向必须位于顶部.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那么也不可能。)BAB

因此,以上内容可以简化为:

# 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....

相关内容