mod_rewrite中的redirectMatch

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mod_rewrite中的redirectMatch相关的知识,希望对你有一定的参考价值。

我们最近将我们的网站移动到另一台服务器,比如http://newdomain.com,而我们的旧网站就是说http://olddomain.com

我想保持旧网站上的用户目录可以像以前一样访问,即http://oldomain.com/~user,但根文件夹下可访问的任何内容都指向新域。旧服务器上的用户目录位于/home/user文件系统中。所以,我写了以下规则:

 RedirectMatch permanent ^/~(.*) /home/~$1

 RedirectMatch permanent ^/(.*) http://newdomain.com/$1

虽然第二条规则完美无瑕,但第一条仍然希望映射到新网站如下:http://newdomain.com/~user

如何修复这两个规则,以便旧网站上的/var/www/html中的任何内容都重定向到新网站,但/home下的任何内容都不会重定向?

--

这是基于Ben的解决方案的新代码,它正确地映射了用户主页访问的URL,但是浏览器抱怨并且不显示他们的站点。根文件夹URL重定向工作正常。

RewriteEngine on
#   RewriteBase / -- I had to comment this as the apache did not like it
Rewriterule ^/~(.*) /~$1 [R=301,L]

RewriteCond %{REQUEST_URI} !^/home/~
RewriteRule ^/(.*) http://newdomain.com/$1 [R=301,L]
答案

您应该使用RewriteCond测试是否使用/home/~的URI前缀,并使用RewriteRule重写URL并进行永久重定向。

RewriteEngine On
RewriteBase /
RewriteRule ^~(.*) /home/~$1 [R=301,L]

RewriteCond %{REQUEST_URI} !^/home/~
RewriteRule ^(.*) http://newdomain.com/$1 [R=301,L]

第3行:如果URI前缀为~{any_characters},则将URI重写为/home/~{any_characters},永久重定向

第5行:测试URI是否不是/home/~{any_characters}的前缀

第6行:然后处理重写规则,将{any_characters}中的URI重写为http://newdomain.com/{any_characters},永久重定向

以上是关于mod_rewrite中的redirectMatch的主要内容,如果未能解决你的问题,请参考以下文章

如何忽略 mod_rewrite 中的目录?

mod_rewrite 中的可选参数(漂亮的 url)

mod_rewrite 规则可以修改 PHP 中的 require_once 指令吗?

.htaccess mod_rewrite 中的“或”标志

mod_rewrite中的redirectMatch

apache mod_rewrite:如何根据其他目录中的文件存在为同一目录添加不同的重写规则?