我已更改了我的配置文件,以便当用户在没有www的情况下键入域时,会使用www重定向到域:
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
我也希望我的https用于/ user
下的任何内容我得到错误也可能重定向,我哪里错了?
所以我有:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/example.com/site;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location /user {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
对于端口443:
server {
listen 443;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
root /var/www/example.com/site;
index index.html index.htm;
ssl on;
ssl_certificate //path here
ssl_certificate_key //path here
location / {
rewrite ^ http://$http_host$request_uri? permanent;
}
location /user {
}
}
答案 0 :(得分:0)
用
listen 80 default_server;
你告诉nginx这个服务器块是所有http请求的默认服务器,无论服务器名称如何。
指令
return 301 $scheme://www.example.com$request_uri;
将nginx设置为将此服务器块的所有传入流量重定向到www.example.com。重定向的流量再次点击相同的服务器块(默认服务器),并且该过程重复,因此重定向循环。
要修复此更改您的配置文件并添加第二个服务器块:
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name www.example.com;
#rest of your config
[...]
}
server {
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
如果您想知道,可以省略端口80,因为它是默认设置。
同样的原则适用于443的流量(在重定向模块中,您必须提供端口和ssl特定配置)。