.htaccess 添加尾部斜杠2子目录时,mod_重写规则中断

.htaccess 添加尾部斜杠2子目录时,mod_重写规则中断,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我对mod rewrite规则非常、非常陌生,在将以前托管在子目录中的站点重定向到新域时遇到了问题。以下是我使用的规则: RewriteEngine on RewriteBase /oldsite/ #also tried this without the trailing slash RewriteRule ^.* http://newsite.com [R=301,NC,L] 这是完美的,直到你得到3级深,并添加一个尾部斜杠到重定向的url。因此,结果如下所示: olddomain.co

我对mod rewrite规则非常、非常陌生,在将以前托管在子目录中的站点重定向到新域时遇到了问题。以下是我使用的规则:

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文件。

您就快到了,请将此文件放置在服务器的/oldsite中的.htaccess中:

RewriteEngine On
RewriteRule (^.*) http://newsite.com/$1 [R=301,NC,L] 
当您将要匹配的正则表达式放在括号中时,它可以作为$1使用。如果你有多个,第一个是$1,第二个是$2,以此类推


我建议阅读mod_rewrite的手册页面,特别是rewriterule部分()。

谢谢您的快速回复,布雷迪。这同样有效(并且修复了我刚刚意识到的另一个问题,即在旧站点上生成404的url将重定向到新站点的主页),但仍然遇到相同的问题:在最后一个示例中添加尾部斜杠仍然重定向到主页。将阅读更多内容,但在您引用的页面上未看到与此特定实例相关的任何内容。测试之前是否清除了浏览器缓存?有时浏览器会保留这些重定向。我只是在本地测试了一次。哈。是的,这就解决了。哎呀。问题解决;谢谢你,布雷迪!