我的代码不能用于像domain.co.uk这样的二级域名
这是我的conf:
# add www. if ($host ~ ^(?!www)) { rewrite ^/(.*)$ http://www.$host/$1 permanent; } # remove subdomain if ($host ~ "^www\.(.*)\.(.*\.([az]{2,4}|[az]{2}\.[az]{2}))") { set $host_without_sub $2; rewrite ^/(.*)$ http://www.$host_without_sub/$1 permanent; }
编辑:现在我正在使用这个。 它工作正常:
# rules server { #general listen 80; # add www. if ($host ~ ^(?!www)) { rewrite ^/(.*)$ http://www.$host/$1 permanent; } # remove subdomain if ($host ~ "^www\.(.*?)\.(.{3,}\.([az]{2}\.[az]{2}|[az]{2,4}))$") { set $host_without_sub $2; rewrite ^/(.*)$ http://www.$host_without_sub/$1 permanent; }
您的原始configuration没有利用nginxconfiguration。 重写像nginx将不得不对每个请求做广泛的分析。 如果您处于性能和快速响应时间的环境中,那么您将需要使用服务器模块。
# Add www and redirect subdomains. server { listen 80; server_name domain.com *.domain.com; rewrite ^ http://www.domain.com$request_uri permanent; }
这种方式没有复杂的parsing,Nginx使用哈希表进行服务器查找,重写使用已parsing的$ request_urivariables。
我不知道你为什么有两个版本。 这是我在我的configuration中。 它删除www.
从任何域的开始:
server { # omitting listen/server_name/access_log/error_log if ($host ~* www\.(.*)) { set $wwwless $1; rewrite ^(.*)$ $scheme://$wwwless$1 permanent; } # locations, other rules, etc }