我将一小包脚本从 Apache 移到了 Nginx。这是一个充满文件的目录,其中需要通过一个脚本显示特定扩展名(php、txt、js、html),需要下载其他文件,并且目录需要可浏览。请注意,gallery.php 目前未被使用。所有这些都可以通过以下 htaccess 实现:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !prettify.php
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteCond %{REQUEST_FILENAME} !upload.php
RewriteCond %{REQUEST_FILENAME} !gallery.php
RewriteRule ^(.*\.(php|txt|js|html)) prettify.php?f=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ index.php?dir=$1 [L,QSA]
RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
php_flag engine off
尝试了很多方法之后,我找到了这个 nginx 配置,它允许我通过 index.php 查看主目录:
server {
client_max_body_size 8M;
listen 80;
listen [::]:80;
server_name paste.<host>;
error_log /vmdata/services/web/logs/paste.error.log;
access_log /vmdata/services/web/logs/paste.access.log;
root /vmdata/services/web/vhosts/paste;
index index.php;
location /index.php {
fastcgi_pass php_php73-fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /prettify.php {
fastcgi_pass php_php73-fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /upload.php {
fastcgi_pass php_php73-fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /gallery.php {
fastcgi_pass php_php73-fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* ^(.*\.(php|txt|js|html))$ {
try_files prettify.php?f=$1;
}
location ~* ^(.*)/$ {
try_files index.php?dir=$1;
}
location / {
try_files $uri $uri/ /index.php?dir=$1;
}
}
文件下载正常,但与特定扩展的位置块匹配的文件开始下载,其中包含 prettify.php 的源代码。目录不会转到 index.php,而只是导致 404。
我在这里做错了什么?据我了解,应该首先执行 4 个特定的 PHP 文件位置块(因为它们最长),但不知何故这不起作用。
我可以找到很多类似的问题,但遗憾的是没有一个真正帮助我
如能得到任何指导我将非常感激,如果有具体的阅读材料我可以真正了解哪里出了问题那就更好了。