我将使用哪个重定向规则来重定向olddomain下的所有页面。示例被重定向到newdomain.example?

该网站有一个完全不同的结构,所以我想在旧域下的每个页面都被重定向到新的域索引页。

我认为这将(在旧域。例如基本目录):

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]

但如果我导航到olddomain。我被重定向到newdomain.example/somepage。我期待重定向到newdomain。不带页后缀的示例。

我怎么才能不提最后一部分?


当前回答

可能是这样的:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]

其他回答

这是apache旧版本中的一个错误(因此mod_rewrite),如果路径被更改,路径前缀会附加到重写的路径上。在这里看到的

我认为它在apache2 V2.2.12中被修复了,有一个你需要使用的特殊标志,当我找到它时,我会在这里添加它,(我认为它是NP for No Path)

RewriteRule ^(.*)$ http://newdomain.com/ [??]

换出域,保留所请求的路径和查询:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,QSA,L]
</IfModule>

%{REQUEST_URI}是请求路径的别名。

R=301是一个HTTP 301永久移动

L表示最后一条规则,不再考虑任何条件。

QSA含义查询字符串追加保存任何查询字符串(例如?foo=bar)

调整域和请求路径,然后这样做:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^(.*)$ https://example.com/subfolder/$1 [R=301,QSA,L]
</IfModule>

^(.*)$捕获请求路径从头到尾的所有内容。

$1输出第一个捕获的组

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [NC,OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

这对我很有效

如果您要将旧站点重定向到的新域位于不同的主机上,您可以简单地使用重定向

Redirect 301 / http://newdomain.com

这将把所有来自olddomain的请求重定向到newdomain。

重定向指令将不起作用或可能导致重定向循环,如果你的newdomain和olddomain都在同一个主机上,在这种情况下,你需要使用mod-rewrite重定向基于请求的主机头。

RewriteEngine on


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 

只是为了澄清,在删除托管重定向这是在路上,我原来的解决方案也起作用:

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]