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

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

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

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

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

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


当前回答

尝试这种方法重定向到主页新域,它为我工作:

RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule ^(.*)$ "https\:\/\/newdomain\.com\/" [R=301,L]

其他回答

我尝试了user968421的答案和OP的解决方案,但浏览器弹出了结帐页面的安全错误。我不能告诉你确切的原因。

我们的主机(Site Ground)也搞不清楚。

最终的解决方案很接近,但对user968421的答案进行了轻微的调整(边注:与OP不同,我试图重定向到相应的页面,而不仅仅是到主页,所以我维护了从user968421的答案的反向引用[域名后的$1]):

RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]

从Host Gator文章推荐的这个htaccess重定向生成器得到了调整(绝望的时间,绝望的措施,amiright?)

就像这样简单,这将不会携带从URL到新域的尾随查询。

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]

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

<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>

这对我很有效

从可用性的角度来看,如果你也发送请求的路径(即,你现在有什么),让你的新网站处理它会更好:

你搜索了“/products”。 不幸的是,这一页已经消失了。您是否愿意访问“/new_products”?

(更好的是,自动地做这件事。)

对于一个更大的网站来说,这显然是大量的编码和启发式,但在我看来,这在用户满意度方面是值得的(当你精心保存的梦想产品书签只是把你引向newdomain.com的首页时,这是令人沮丧的)。