Nginx переписать синтаксис - PullRequest
3 голосов
/ 13 марта 2012

Я видел множество переписываний ngnix с таким синтаксисом:

server {
    server_name  www.example.com;
    rewrite ^(.*) http://example.com$1 permanent;
}

Я не понимаю ^(.*) часть. ^ берет ли все после TLD URI?

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

^ действительно совпадает в начале строки.В случае директивы rewrite nginx это означает начало компонента пути фактического URI.К сожалению, документация nginx немного неверна.Цитирование из http://www.nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite:

Если указанное регулярное выражение совпадает с URI, URI изменяется, как указано в строке замены.

Однако этоэто технически неправильно.rewrite не соответствует всему URI / URL, а только его компоненту пути (который всегда начинается с /, даже если пользователь вводит только, например, http://www.example.com вместо http://www.example.com/).Поэтому rewrite ^(.*) http://example.com$1 permanent; не превращается в http://example.comwww.example.com.

1 голос
/ 14 марта 2012

Если я правильно помню, ^ просто устанавливает правило регулярного выражения в соответствии с началом строки. Скобки используются для извлечения этой части с переменными $ 1-9.

Еще одно решение из Nginx вики. Ссылка

server {
   server_name www.example.com;
   rewrite ^ http://example.com$request_uri? permanent;
}
...