我想重定向......
http://old.com/a/b/ -> http://new.com/y/z/
http://old.com/a/b/file.php -> http://new.com/y/z/
http://old.com/a/b/c/file.php -> http://new.com/y/z/
http://old.com/a/b/anything -> http://new.com/y/z/
http://old.com/a/b/EXCLUDE.php -> http://old.com/a/b/EXCLUDE.php
我目前在httpd.conf中有以下内容,它正确地重定向:
RedirectMatch 301 /a/b/(.*) http://new.com/y/z/
我不知道如何排除一个文件被重定向。
基本上我希望所有网址从“old.com/a/b/”开始转到一个新的网址,但我希望忽略一个网址。
答案 0 :(得分:7)
在正则表达式中使用否定前瞻应该有效:
RedirectMatch 301 /a/b/(?!EXCLUDE.php) http://new.com/y/z/
如果您希望路径的其余部分继续使用重定向,请使用反向引用$ 1,如下所示:
RedirectMatch 301 /a/b/(?!EXCLUDE.php) http://new.com/y/z/$1
答案 1 :(得分:3)
我知道它已被回答,但对于想要一些RewriteRule的人来说:
http://old.com/a/b/ -> http://new.com/y/z/
http://old.com/a/b/file.php -> http://new.com/y/z/
http://old.com/a/b/c/file.php -> http://new.com/y/z/
http://old.com/a/b/anything -> http://new.com/y/z/
http://old.com/a/b/EXCLUDE.php -> http://old.com/a/b/EXCLUDE.php
这应该有效:
RewriteCond %{HTTP_HOST} ^old\.com [NC]
RewriteCond %{REQUEST_URI} !^(/a/b/EXCLUDE\.php) [NC]
RewriteRule /a/b/(.*) http://new.com/y/z$1 [QSA,NC,R=301]