我无法将我的一个域名从 www 重定向到非 www。过去我使用过类似(即完全相同)的配置,而且成功了。但不知何故,这个配置却不起作用。
我的第一部分是我想要的配置https://example.org。基本上没有 www 并且通过 SSL 提供服务。
server {
server_name example.org;
root /var/www/example.org/html;
index index.php index.html index.htm;
access_log /var/www/example.org/logs/access.log;
error_log /var/www/example.org/logs/error.log;
try_files $uri $uri/ /index.php$is_args$args;
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
然后我有一个部分将 https 上的 www 重定向到 https 上的非 www:
server {
if ($host = www.example.org) {
return 301 https://example.org$request_uri;
}
listen 443 ssl;
server_name www.example.org;
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
然后我有一个部分将 http 重定向到 https:
server {
if ($host = example.org) {
return 301 https://example.org$request_uri;
}
listen 80;
server_name example.org;
return 404;
}
最后,我将 www http 重定向到非 www https。
server {
if ($host = www.example.org) {
return 301 https://example.org$request_uri;
}
listen 80;
server_name www.example.org;
return 404;
}
我希望看到以下内容:
- https 非 www -> 显示网站;
- https www -> 重定向到 https 非 www;
- http 非 www -> 重定向到 https 非 www;
- http www -> 重定向到 https 非 www。
实际情况:
- https 非 www -> 显示网站(好)。
- https www -> 显示默认 NIGNX 页面(不好)。
- http 非 www -> 重定向到 https 非 www 然后显示该网站(好)。
- http www -> 重定向到 https www 然后显示默认的 NGINX 页面(不好)。
我在这里错过了什么?在我看来,这应该有效,但事实并非如此。我已经重新加载/重新启动了 nginx,确保文件确实已加载,重新组织了其中一些部分的顺序,但这没有帮助。
感谢您的阅读。