再次出现nginx重定向问题。我需要我的网站只能通过https访问,并且始终使用子域名www(或app或api)。以下配置是否可以接受https://example.com(没有www)?因为这就是我现在所看到的,无法解释原因......我只是补充一点,nginx配置上没有其他服务器部分。
server {
listen 80;
server_name ~^(?<subdomain>www|app|api)\.example\.com$;
index index.html index.htm;
return 301 https://$subdomain.example.com$request_uri;
}
server {
listen 443 ssl;
server_name ~^(?<subdomain>www|app|api)\.example\.com$;
root /var/www/html/pathToMyWebsite;
index index.php;
}
编辑:这是我最终使用的感谢@ivan:
# Redirects http://example.com & https://example.com to https://www.example.com
server {
listen 80;
listen 443 ssl; # Here is the trick - listen both 80 & 443.
# other ssl related stuff but without "ssl on;" line.
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 80;
server_name ~^(?<subdomain>www|app|api)\.example\.com$;
index index.html index.htm;
return 301 https://$subdomain.example.com$request_uri;
}
server {
listen 443 default_server ssl;
server_name ~^(?<subdomain>www|app|api)\.example\.com$;
root /var/www/html/pathToMyWebsite;
index index.php;
}
注意&#34; default_server&#34;我添加了listen 443 default_server ssl;
答案 0 :(得分:2)
首先,在nginx配置中使用regexp通常不是一个好的解决方案。由于regexp引入了冗余复杂性,因此复制和粘贴配置块或使用include
语句几乎总是更合理。当然,这是一种权衡使用的方式。
但是,我的配置中的使用模式非常相似:
# Redirects http://example.com & https://example.com to https://www.example.com
server {
listen 80;
listen 443 ssl; # Here is the trick - listen both 80 & 443.
# other ssl related stuff but without "ssl on;" line.
server_name example.com;
return 301 https://www.example.com$request_uri;
}
# Redirects http://*.example.com to https://*.example.com
server {
listen 80;
server_name ~^.+\.example\.com$;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name ~^.+\.example\.com$;
ssl on;
# ...
}