2015-12-17 5 views
0

Это регулярное выражение не работает.Расположение регулярного выражения Nginx

Ниже приведено.

location ~* /a2aEx\?.*$ { 

    } 

я просил /a2aEx?AID=ASA_1&BID=1 но NGINX ответить 404 status

Однако, если я могу это исправить ниже, он отлично работает, возвращая 200 status

location ~* /a2aEx.*$ { # remove `\?` 

    } 

Я проверить мои регулярные выражения на Python с ниже код.

text = "/a2aEx?AID=ASA_1&BID=1" 

reObj = re.match("/a2aEx\?.*$", text) 
print reObj.string # it returns `/a2aEx?AID=ASA_1&BID=1` 

Видя симптом, побег символ (\) не работает, как я ожидал.

ответ

1

Ваше регулярное выражение прекрасное. Проблемы связаны с тем, как Nginx изучает входящий запрос.

Nginx обрабатывает что-либо после ? в виде строки запроса в запросе. location соответствует совпадению с переменной $uri (/a2aEx) в вашем примере. Блоки местоположения не рассмотрите переменную $args, с которой вы пытаетесь сопоставить.

Ваш второй пример соответствует правилу $uri.

Для работы с аргументами, вы можете использовать оператор if Nginx, но это generally discouraged.

0

Проблема с бегством?

Выполните одно из следующих действий:

  • двойной обратный слеш

    location ~* /a2aEx\\?.*$ { 
    
  • поставить регулярное выражение в кавычки

    location ~* "/a2aEx\?.*$" { 
    
  • заменить классом персонажа

    location ~* "/a2aEx[?].*$" { 
    
+0

Это все те же, как и прежде, возвращая 404 статуса. – SangminKim

Смежные вопросы