Regex - как соответствовать всему кроме конкретного шаблона

Я использую Apache, и я хочу перенаправить весь полученный запрос к ssl виртуальному хосту.

Таким образом, у меня есть следующая строка в регулярном http виртуальном хосте:

RedirectMatch (.*) https://1 www.mydomain.com$

которые в основном заменяют 1$ всем.

Это работает отлично. Но теперь, я должен получить доступ к конкретному CGI, который не может быть на SSL виртуальным хостом. Таким образом, я хотел бы перенаправить весь запрос, кроме следующего:

"http://www.mydomain.com/mycgi/cgi.php"

Я имею поиск на этом форуме и нашел некоторое сообщение относительно regex исключения, но ни один не работает. Любая справка значительно ценилась бы.

Спасибо. Alain

6
задан Alain 26 April 2010 в 20:18
поделиться

2 ответа

Apache 2.2 и более поздние версии имеют поддержку отрицательного просмотра вперед в регулярных выражениях. Если вы используете Apache 2.2 или новее, это должно работать:

RedirectMatch ^/(?!mycgi/cgi.php)(.*) https://www.mydomain.com/$1
3
ответ дан 17 December 2019 в 07:02
поделиться

Я считаю, что RedirectMatch - это короткое замыкание. Это означает, что если вы поместите другой RedirectMatch перед вашим match-all, только первый матч будет выполнен. так что что-то вроде...

RedirectMatch (/mycgi/cgi.php) http://www.mydomain.com$1 
RedirectMatch (.*) https://www.mydomain.com$1 
1
ответ дан 17 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: