冲突的 HTAccess 文件 - 重写和 301 不适用于 wordpress 网站

Conflicting HTAccess files - rewrites and 301s not working for wordpress sites

我在一台服务器上托管了两个站点。一个旧的在子目录中,一个新的在根文件夹中。

blog.domain.com 在 /var/www/ - 当前站点

blog.domain.com/blog 在 /var/www/blog/ - 旧站点

blog.domain。com/blog 是我们出于各种原因需要重定向到新站点的旧站点。

我在 /var/wwww/blog/ 文件夹中的 htaccess 中添加了 301 负载:

Redirect 301 / http://blog.domain.com
Redirect 301 /subfolder/ http://blog.domain.com

然而,当我访问 http://blog.domain.com/blog 时,我被重定向到 http://blog.domain.comblog instead of: http://blog.domain.com

以下是现有的 HTAccess 文件: /var/www/.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /domain/
RewriteCond %{HTTP_HOST} ^78\.41\.157\.192$
RewriteRule ^(.*)$ http://blog.domain.co.uk/ [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

/var/www/blog/.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

Redirect 301 / http://blog.domain.com
Redirect 301 /subfolder/ http://blog.domain.com

我没有编写 htaccess 文件,如果能深入了解任何错误或为什么添加 301 不起作用会很好。我认为这是由于重写规则造成的。

发生这种情况的原因是您在重定向目标的末尾缺少 /。 Apache 的 Redirect 只是匹配目标 URI,然后将其后的任何内容附加到目标。所以:

Redirect 301 / http://blog.domain.com/
Redirect 301 /subfolder/ http://blog.domain.com/

但是,由于您有 wordpress 路由规则,您根本不想使用 RedirectRedirect 是 mod_alias 的一部分,而不是 mod_rewrite,这意味着当请求的 URL 与两个模块匹配时,它们都会被应用。所以你会得到一些奇怪的意外重定向。尝试仅使用 mod_rewrite,并在 之前添加这些规则 您的 wordpress 规则:

RewriteRule ^$ http://blog.domain.com/ [L,R=301]
RewriteRule ^subfolder/?$ http://blog.domain.com/ [L,R=301]