我有一台 Debian 12 + Nginx 1.22 + PHP 8 服务器,其文件结构如下:
/home/www/
└───example
└───mysubwebsite
“示例”对应的 nginx vhost conf 文件是:
server {
server_name example.com;
root /home/www/example;
index index.html index.htm index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location /mysubwebsite {
rewrite ^/mysubwebsite/(.*)\.html$ /mysubwebsite/index.php?hash=$1 last;
}
}
http://example.com/mysubwebsite
它运行良好,可以通过适当的重写访问 mysubwesite 。
现在我需要将服务器上的 mysubwebsite 文件夹移动到父文件夹,同时保留相同的公共 URL 和 mysubwebsite 的重写规则:
/home/www/
├───example
└───mysubwebsite
因此我通过以下方式更新了 vhost conf 文件:
server {
server_name example.com;
root /home/www/example;
index index.html index.htm index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location /mysubwebsite {
root /home/www;
rewrite ^/mysubwebsite/(.*)\.html$ index.php?hash=$1 last;
}
}
但是当我浏览时http://example.com/mysubwebsite
,出现 404 错误,没有日志。我还尝试了重写指令的不同路径,但都没有成功。
对于这种情况,配置子目录重写的正确方法是什么?
编辑:在示例中添加了我最初没有提到的域的 PHP 处理指令,没有意识到它很重要