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

时间:2015-03-20 12:46:47

标签: wordpress apache .htaccess mod-rewrite

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

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

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

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

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

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

但是当我访问htttp://blog.domain.com/blog时,我会被重定向到http://blog.domain.comblog而不是: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/$1 [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文件,任何对任何错误的洞察或为什么添加301s都不会很好。我认为这是由于重写规则。

1 个答案:

答案 0 :(得分:1)

发生这种情况的原因是您在重定向目的地的末尾错过了/。 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,并在之前添加这些规则:

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