Nginx 重写和域名中的 - 字符

Nginx 重写和域名中的 - 字符

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

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

答案1

您使用的服务器块看上去并没有什么问题。

我使用运行 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

值得注意的是,破折号在正则表达式中是一个特殊字符,因此\-在正则表达式中使用时需要转义(即)。但是,在您的服务器块中,您的 server_name 和重写目标都不是正则表达式(尽管 server_name 可能是正则表达式)。

顺便说一句,如果您不使用捕获,则可以将重写简化为:

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

您的重定向很可能已被浏览器缓存(这是“永久”重定向,因此可能被浏览器/中间代理缓存)。处理这种情况的一些建议可能包括:

  • 强制刷新:Ctrl+F5
  • 清除浏览器缓存并重新启动浏览器
  • 使用隐私浏览模式
  • 使用开发者工具(例如 Firebug)检查位置标头
  • 刷新 DNS 缓存

当测试此类配置时,您可能希望在每次修改时做出明显的改变(例如 www1 或 /test1 等),以便您可以验证您没有加载缓存内容。

相关内容