Nginx 1.10.3 Ubuntu, стандартная установка APT. index index.php;
расположен за пределами блока server
.
Мне нужно:
http://example.com/test/1
, указывающий на
/var/www/example.com/test/1
http://example.com/test/2
, указывающий на
/var/www/example.com/test/2
… и т. Д.
Поскольку я создам слишком много тестов, мне нужен шаблон для try_files
. В настоящее время я обхожусь без подстановочного знака:
server {
server_name example.com;
root /var/www/example.com;
location /test/1/ {
try_files $uri $uri/ /test/1/index.php?$args;
}
location /test/2/ {
try_files $uri $uri/ /test/2/index.php?$args;
}
location ~ \.php$ {
...
}
Из многих рекомендаций ни одна из них не работает.
Обычный PHP работает нормально. WordPress и Laravel выдали сообщение «Файл не найден»:
server {
server_name example.com;
location ~ ^/test/(?<content>.+)$ {
root /var/www/example.com/test/$content;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
...
}
Файл не найден:
server {
server_name example.com;
location ~ ^/test/(?<content>[^/]+) {
root /var/www/example.com/test/$content;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
...
}
При всех приведенных ниже попытках он загружает файл PHP вместо запуска PHP:
server {
server_name example.com;
root /var/www/example.com;
location ~ /(?<content>[^/]+) {
try_files $uri $uri/ /$content/index.php?$args;
}
location ~ \.php$ {
...
}
server {
server_name example.com;
root /var/www/example.com;
location ~ /(.*)/ {
try_files $uri $uri/ /$1/index.php?$args;
}
location ~ \.php$ {
...
}
server {
server_name example.com;
root /var/www/example.com;
location ~ /test/(?<content>[^/]+) {
try_files $uri $uri/ /test/$content/index.php?$args;
}
location ~ \.php$ {
...
}
server {
server_name example.com;
root /var/www/example.com;
location ~ /test/(?<content>.+) {
try_files $uri $uri/ /test/$content/index.php?$args;
}
location ~ \.php$ {
...
}
Если можно, я готов отдать 10 долларов за правильный ответ
Блоки регулярного выражения location
оцениваются по порядку, поэтому блок .php
должен быть помещен перед / test / .. .
блок, в противном случае файлы .php
в папке / test /
будут загружены, а не запущены. Подробнее см. этот документ .
Ваша лучшая версия была второй после последней. Регулярное выражение извлекает только элемент пути, следующий за префиксом / test /
.
Просто поменяйте местами блоки location
. Например:
server {
server_name example.com;
root /var/www/example.com;
location ~ \.php$ {
...
}
location ~ /test/(?<content>[^/]+) {
try_files $uri $uri/ /test/$content/index.php?$args;
}
}