У меня есть доменное имя, которое содержит - char. Например, my-domain.com. Когда я использую rewrite, Nginx неправильно перезаписывает url, браузер перенаправляется на my.com вместо my-domain.com. Что не так в моем правиле перезаписи?
server {
listen 80;
server_name www.my-domain.com;
rewrite ^/(.*) https://www.my-domain.com permanent;
}
Кажется, что с серверным блоком, который вы использовали, все в порядке.
Я протестировал точно предоставленный вами блок на виртуальной машине CentOS 6.2 под управлением nginx 1.0.13 и nginx 1.2.0. Я использовал curl, чтобы предоставить соответствующий заголовок Host:
curl --header "Host:www.my-domain.com" --head 127.0.0.1
Ответ не показал ошибки, успешно указывая на новый пункт назначения (обратите внимание на заголовок «Местоположение»):
HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.0
Date: Sun, 29 Apr 2012 18:56:45 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://www.my-domain.com
Стоит отметить, что тире является специальным символом в регулярных выражениях, и, как следствие, его нужно экранировать (т.е. \-
) при использовании в регулярном выражении. Однако в вашем серверном блоке ни ваше имя_сервера, ни место назначения перезаписи не являются регулярными выражениями (хотя имя_сервера может быть регулярным выражением).
Кстати, если вы не используете захват, вы можете упростить перезапись до:
rewrite ^ https://www.my-domain.com permanent;
Вполне вероятно, что ваше перенаправление было кэшировано вашим браузером (это «постоянное» перенаправление, поэтому оно может быть кэшировано браузером / промежуточными прокси). Некоторые предложения по устранению этого могут включать:
При тестировании таких конфигураций вы можете захотеть сделать видимое изменение при каждой модификации (например, www1 или / test1 и т. Д.), Чтобы вы могли убедиться, что вы не загружаете кэшированный контент.