Перенаправить все файлы, кроме одного, в каталог через httpd.conf / htaccess - PullRequest
4 голосов
/ 22 марта 2012

Я хотел бы перенаправить как таковой ...

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/

Я не знаюкак исключить перенаправление одного файла.

По сути, я хочу, чтобы все URL , начинающиеся с"old.com/a/b/", переходили на новый URL, за исключением того, что я хочуодин URL, который нужно игнорировать.

Ответы [ 2 ]

7 голосов
/ 22 марта 2012

Использование регулярного выражения с отрицательным прогнозом должно работать:

RedirectMatch 301 /a/b/(?!EXCLUDE.php) http://new.com/y/z/

Если вы хотите, чтобы остаток пути был перенесен с перенаправлением, используйте обратную ссылку $ 1, как в:

RedirectMatch 301 /a/b/(?!EXCLUDE.php) http://new.com/y/z/$1
3 голосов
/ 22 марта 2012

Я знаю, что на него ответили, но для людей, которые хотят что-то от 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]
...