Какая-либо причина Вы не хотите использовать mod_rewrite?
Вы могли подражать функциональности с этим:
RewriteCond %{REQUEST_URI} !^/(somepath|someotherpath) RewriteRule (.*) $1 [R=permanent] RewriteRule http://%{SERVER_NAME}(.*) https://www.foobar.com$1 [L]
Я не понял, что Apache использует PCRE. Так как это делает, можно внести свою лепту вуду, чтобы сделать то, что Вы хотите с mod_alias:
RedirectMatch permanent ^/?((?!(thisisfoo|thisisbar)).*) https://www.foobar.com/$1
где/thisisfoo и/thisisbar являются исключениями к перенаправлению.
Согласно документации (на http://httpd.apache.org/docs/2.2/mod/mod_alias.html#order ), Redirect
обрабатываются в том порядке, в котором они встречаются. Таким образом, вам нужно сначала поставить более ограничительное правило, а затем - всеобъемлющее правило в конце.
Я попал сюда до того, как нашел правильный ответ для своей ситуации, поэтому добавляю свое решение для справки.
Мне нужно было перенаправить все, кроме двух папок, я назвал их files1
и files2
в приведенном ниже примере:
RedirectMatch Permanent "^ (/(?!(files1/|files2/)).*)" https://www.example.com$1
Точно так же слово permanent
можно заменить на 301
что по сути то же самое («постоянный» в HTTP-коде) или с 302
(что означает временное перенаправление).