Что-то мне подсказывает, что то, как я пошел по этому пути с самого начала, неверно, что мешает мне решить эту новую проблему ... Но вот мы!
Настройка
location ~ ^/dev/([^\/]+?)\/(.*) {
alias /opt/dev/$1/www/$2;
autoindex on;
# PHP location check for personal dev environments
location ~ ^/dev/([^\/]+?)\/([^\/].+\/|)(.+\.php)$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$3;
fastcgi_param PHP_VALUE error_log=/opt/dev/$1/logs/php_errors.log;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
}
Эта настройка выше позволяет моим разработчикам иметь собственную среду разработки. Переход к: http://site_url/dev/[user]/[project]/ работает просто отлично, если в каталоге проекта есть php-файлы, которые локально находятся в каталоге / opt / dev / [user] / www / [project] /, Одно это заняло у меня совсем немного времени, чтобы выяснить это, но теперь у нас есть новая дилемма, которая бьет меня по заднице уже 8 часов подряд.
Примечание: Regex - моя слабость в программировании, поэтому тот факт, что конфигурация nginx для таких вещей основана на регулярных выражениях, убивает меня мягко
Проблема
Мне нужно уметь обнаруживать, когда путь за уровнем [project] недоступен, и затем перенаправлять этот запрос в index.php на уровне проекта, с параметром route, чтобы мы могли обработать его на php уровень.
Например:
http://site_url/dev/[user]/[project]/something/else/
Если каталог / opt / dev / [user] / www / [project] / что-то / else не существует (или в нем нет файлов php), мне нужен запрос, чтобы перейти к / opt / dev / [user] / www / [project] /index.php, но я также хочу вызвать index.php с параметром «route», который дает остальную часть URL.
(то есть: index.php? Route = что-то / еще)
Я надеюсь, что это имеет смысл, и я надеюсь, что кто-то может помочь мне здесь.
Я признаю, что это может означать полное изменение моей конфигурации, но мне все равно, пока она работает.
Полный источник
Это весь мой файл конфигурации сверху вниз:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www;
index index.php index.html index.htm index.nginx-debian.html;
server_name 192.168.20.200;
location / {
try_files $uri $uri/ =404;
}
location ~ ^/dev/([^\/]+?)\/(.*) {
alias /opt/dev/$1/www/$2;
autoindex on;
# PHP location check for personal dev environments
location ~ ^/dev/([^\/]+?)\/([^\/].+\/|)(.+\.php)$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$3;
fastcgi_param PHP_VALUE error_log=/opt/dev/$1/logs/php_errors.log;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
}