Назад | Перейти на главную страницу

Nginx rewrite и - символ в доменном имени

У меня есть доменное имя, которое содержит - 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;

Вполне вероятно, что ваше перенаправление было кэшировано вашим браузером (это «постоянное» перенаправление, поэтому оно может быть кэшировано браузером / промежуточными прокси). Некоторые предложения по устранению этого могут включать:

  • Принудительно обновить с помощью: Ctrl + F5
  • Очистите кеш браузера и перезапустите браузер.
  • Использовать режим приватного просмотра
  • Проверьте заголовок Location с помощью инструментов разработчика (например, Firebug)
  • Очистите кеш DNS

При тестировании таких конфигураций вы можете захотеть сделать видимое изменение при каждой модификации (например, www1 или / test1 и т. Д.), Чтобы вы могли убедиться, что вы не загружаете кэшированный контент.