Как использовать htaccess для перенаправления всех подкаталогов, кроме одного
Вопрос
Прошло много времени с тех пор, как я в последний раз возился с .htaccess, и, похоже, я не могу разобраться в этом совершенно правильно.У меня есть сайт, скажем example.com, на который я хочу example.com / * перенаправить example.com/collector.html за исключением для URL-адресов в подкаталоге example.com/special, с которым я хочу продолжить работу.
Например:
- example.com/page.html следует перенаправить на example.com/collector.html
- example.com/foo/bar следует перенаправить на example.com/collector.html
- example.com/special/page.html не следует перенаправлять
Я бы подумал, что что-то вроде
RedirectMatch 302 ^/[^(special)]/.* /collector.html
RedirectMatch 302 ^/[^(collector.html)/]* /collector.html
это помогло бы, но, похоже, работает не так, как я хочу.
Решение
Может быть, это?(требуется mod_rewrite)
RewriteEngine On
RewriteRule !^(special(/.*)?|collector\.html)$ collector.html [R,L]
Другие советы
Это прекрасно работает для меня в Apache 2.2.13, где я воссоздал структуру каталогов, которую вы описали.
RedirectMatch 302 /(?!special) http://www.example.com/collector.html
Шаблон в скобках гласит, что НЕ соответствует, если URI содержит строку 'special'.
Также перезапись мода не всегда доступна и в данном случае не нужна.
Попробуй это:
RedirectMatch 302 /\/[^(special)]\/.+/ /collector.html
RedirectMatch 302 /\/[^(collector\.html)]/ /collector.html
Может быть...?
RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]