Nginx重写和 – 域名中的字符

我有包含 – 字符的域名。 例如my-domain.com。 当我使用重写时,Nginx错误地重写URL,浏览器被redirect到my.com而不是my-domain.com。 我的重写规则有什么问题?

server { listen 80; server_name www.my-domain.com; rewrite ^/(.*) https://www.my-domain.com permanent; } 

您使用的服务器块没有出现任何问题。

我testing了你提供的确切块,一个运行nginx 1.0.13和nginx 1.2.0的CentOS 6.2虚拟机。 我用curl来提供匹配的主机头:

 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 

值得注意的是,破折号是正则expression式中的一个特殊字符,因此在正则expression式中使用时需要被转义(即\- )。 然而,在你的服务器块中,你的server_name和你的重写目的地都不是正则expression式(尽pipeserver_name可能是一个正则expression式)。

顺便说一句,如果你不使用捕获,你可以简化你的重写:

 rewrite ^ https://www.my-domain.com permanent; 

你的浏览器很可能已经caching了你的redirect(这是一个“永久的”redirect,所以它可以被浏览器/中间代理caching)。 处理这些问题的一些build议可能包括:

  • 强制刷新:Ctrl + F5
  • 清除浏览器caching并重新启动浏览器
  • 使用隐私浏览模式
  • 使用开发人员工具(例如Firebug)检查位置标题
  • 刷新您的DNScaching

当testing这样的configuration时,您可能希望对每个修改(例如www1或/ test1等)进行可视化更改,以便确认您没有加载caching的内容。