我有以下配置文件。
server {
listen 80;
server_name web.example.com;
access_log /var/www/example/shared/log/web.access.log;
error_log /var/www/example/shared/log/web.error.log debug;
rewrite ^/(.*)$ http://www.example.net$request_uri; permanent;
}
当我请求curl -Ii -H“Host:example.com”http://example.com时,上述重写规则有效。 (ARGH)..
server_name明确地说“web.example.com”
2014/11/18 22:49:20 [通知] 30694#0: 1868“^ /(。)$”匹配“/”,客户端:1.2.3.4,服务器:web .example.com,请求:“HEAD / HTTP / 1.1”,主持人:“example.com” 2014/11/18 22:49:20 [通知] 30694#0:* 1868重写重定向:“http://www.example.net/”,客户端:1.2.3.4,服务器:web.example.com,请求:“HEAD / HTTP /1.1“,主持人:”example.com“
此处不存在其他服务器{}配置。 Xavier(下面)指出我为listen设置了default_server:443;但不是为了听:80.(argh)
答案 0 :(得分:1)
这不是问题的严格解决方案。
发生的事情是,您只有一个服务器块,它成为所有请求的默认服务器块,即使是与服务器名称不匹配的请求。您只需在配置中添加默认服务器块:
server {
listen 80 default_server;
}
顺便说一句,你有一个拼写错误(permanent
之前的分号)并且你不需要重写,因为你有特定的正则表达式。请改用:
return 301 http://www.example.net$request_uri;
答案 1 :(得分:0)
过了一会......
我发现我需要包裹它的位置/ {}
server {
listen 80;
server_name web.example.com;
access_log /var/www/example/shared/log/web.access.log;
error_log /var/www/example/shared/log/web.error.log debug;
location / {
rewrite ^/(.*)$ http://www.example.net$request_uri permanent;
}
}