Как использовать htaccess для перенаправления всех подкаталогов, кроме одного

StackOverflow https://stackoverflow.com/questions/925913

  •  06-09-2019
  •  | 
  •  

Вопрос

Прошло много времени с тех пор, как я в последний раз возился с .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]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top