Я переместил небольшую связку скриптов с 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 (поскольку они самые длинные), но почему-то это не работает.
Я мог найти много похожих вопросов, но, к сожалению, ни один мне не помог
Любые рекомендации были бы очень признательны, если бы я мог прочитать конкретную информацию, чтобы действительно понять, где что-то идет не так, это было бы еще лучше.