我在一台服务器上托管了两个站点。子目录中的旧文件和根文件夹中的新文件。
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都不会很好。我认为这是由于重写规则。
答案 0 :(得分:1)
发生这种情况的原因是您在重定向目的地的末尾错过了/
。 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,并在之前添加这些规则::
RewriteRule ^$ http://blog.domain.com/ [L,R=301]
RewriteRule ^subfolder/?$ http://blog.domain.com/ [L,R=301]