0

我对 mod 重写规则非常非常陌生,并且遇到了我用来将以前托管在子目录中的站点重定向到新域的问题。这是我正在使用的规则:

RewriteEngine on
RewriteBase /oldsite/ #also tried this without the trailing slash
RewriteRule ^.* http://newsite.com [R=301,NC,L]

在您获得 3 层深度并在重定向的 url 中添加尾部斜杠之前,这非常有效。因此,结果如下所示:

  • olddomain.com/oldsite 重定向到 newsite.com [正确]
  • olddomain.com/oldsite/ 重定向到 newsite.com [正确]
  • olddomain.com/oldsite/subdirectory 重定向到 newsite.com/subdirectory [正确]
  • olddomain.com/oldsite/subdirectory/ 重定向到 newsite.com [不正确!]

我觉得我 99% 都在那里,但是把我的头发拉出来一点,弄清楚最后一点。知道我需要改变什么吗?

谢谢!

此外,我测试了将 .htaccess 文件放在公共 html 文件夹以及 /oldsite 文件夹中,并且站点上的其他地方没有其他 htaccess 文件。

4

1 回答 1

1

你快到了,把它放在你服务器上 /oldsite 的 .htaccess 中:

RewriteEngine On
RewriteRule (^.*) http://newsite.com/$1 [R=301,NC,L] 

当您将匹配的正则表达式放在括号中时,它就可以用作 $1。如果你有多个,第一个是 1 美元,第二个是 2 美元,以此类推。

我建议阅读 mod_rewrite 的手册页,特别是 rewriterule 部分(http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule)。

于 2013-02-04T07:22:05.990 回答