冲突的 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 路由规则,您根本不想使用 Redirect
。 Redirect
是 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]
我在一台服务器上托管了两个站点。一个旧的在子目录中,一个新的在根文件夹中。
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 路由规则,您根本不想使用 Redirect
。 Redirect
是 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]