Как использовать htaccess для перенаправления всех, кроме одного подкаталога - PullRequest
4 голосов
/ 29 мая 2009

Прошло много времени с тех пор, как я запутался в .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

справился бы с задачей, но, похоже, не сработает так, как я хочу.

Ответы [ 4 ]

4 голосов
/ 29 мая 2009

Может быть, это? (требуется mod_rewrite)

RewriteEngine On
RewriteRule !^(special(/.*)?|collector\.html)$ collector.html [R,L]
2 голосов
/ 05 января 2010

Это прекрасно работает для меня на Apache 2.2.13, где я воссоздал структуру каталогов, которую вы описали.

RedirectMatch 302 /(?!special)  http://www.example.com/collector.html

Шаблон в скобках говорит НЕ совпадают, если URI содержит строку 'special'.

Также переписывание модов не всегда доступно и в этом случае не требуется.

0 голосов
/ 29 мая 2009

Может быть ...?

RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]
0 голосов
/ 29 мая 2009

Попробуйте это:

RedirectMatch 302 /\/[^(special)]\/.+/ /collector.html 
RedirectMatch 302 /\/[^(collector\.html)]/ /collector.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...