我正在尝试在 Nginx 上设置一个简单的重写规则,但无论我做什么,它总是返回 404:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name site.com;
access_log off;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
rewrite ^/user/(.*)$ /user.php?id=$1 last;
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
我在这里忽略了什么吗?
笔记:
- 它是一个启用 HTTPS 的站点,并配置了 Cert Bot。
- 非HTTPS强制转为HTTPS。
- 这是我使用 Market Place 上的 Digital Ocean 的 LEMP 产品安装的新服务器。
重写规则是:
rewrite ^/user/(.*)$ /user.php?id=$1 last;
这应该导致 site.com/user/abc
但它一直抛出 404。
答案1
我搞砸了,大错特错。意识到上面的配置仅适用于端口 80。即纯 HTTP。我没有意识到 certbot 将 HTTPS 配置放在 sites-available 中的 digitalocean 配置文件的末尾。
愚蠢的我。