Код: Выделить всё
/appВот моя минимальная, воспроизводимая конфигурация:
Код: Выделить всё
server {
# The 'main' project's document root
root /var/www/main/public;
location /app {
# The 'app' project is served from a completely different path
alias /var/www/app/public;
try_files $uri $uri/ @app_rewrite;
# Nested PHP handler for the 'app' project
location ~ \.php$ {
# ... FastCGI settings ...
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
location @app_rewrite {
rewrite ^/app(.*)$ /app/index.php?$1 last;
}
# Global PHP handler for the 'main' project
location ~* \.php$ {
# ... FastCGI settings ...
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
Основной вопрос: после переписывания , который из -за того, что из -за того, что точнее, точное. Выбор? < /p>
1. Мое исследование и первоначальное ожидание
На основе документированных правил приоритета Nginx (Regex ~ имеет более высокий приоритет, чем префикс/), я ожидал, что следующее:
- Постановка URI/upapp/Index.php
/> будет выбран Global Location ~* \ .php $ , потому что местоположения REGEX выигрывают над местоположениями префикса, таких как/App. - Это должно было привести к ошибке, поскольку глобальное местоположение использует корень , и файл не существует в /var/www/main/public/app/index.php.
Вопреки моим ожиданиям, приложение работало отлично . Это означает, что сценарий PHP из пута псевдоним (
Код: Выделить всё
/var/www/app/public/index.php3. Окончательный эксперимент
Чтобы доказать это, я запустил тест:
[*] Я прокомментировал все вложенное местоположение ~ \ .php $ block.
I Reloaded nginx. думал, что глобальный блок использовался в любом случае). Вместо этого запрос немедленно начал возвращать ошибку 404 . Я не понимаю внутреннюю логику NGINX, которая позволяет вложенному местоположению быть приоритетным в сценарии с более высоким приоритетом в этом конкретном перезаписи ... Последний сценарий.
среда
nginx версия: nginx/1.18.0 (ubunt>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -chosen-ov
Мобильная версия