Мне нужно обновить хост nginx, чтобы все запросы к псевдониму были перезаписаны на /alias_path/index.php?q=$uri. Но сейчас все активы больше не доступны.
Это моя текущая конфигурация. И я подхожу ближе, но когда я раскомментирую последнее место, активы больше не доступны.
location /csv-import {
alias /var/www/csv-import/public;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
try_files $uri $uri/ =404;
#location ~ ^/csv-import/(.*)$ {
#alias /var/www/csv-import/public;
#try_files $uri $uri/ /csv-import/index.php?q=$1;
#}
error_log /var/log/nginx/csv-import.error.log;
access_log /var/log/nginx/csv-import.access.log;
}
Файл, который мне не нужен, - это /var/www/csv-import/public/index.php. Все URL-адреса, такие как example.com/csv-import/some/url, должны быть переписаны на example.com/csv-import/index.php?q=some/url, но такие ресурсы, как example.com/csv-import/css/app.css, должны быть доступны под /var/www/csv-import/public/css/app.css.
Я уверен, что есть решение, которое работает идеально, но я не мог его придумать.






Вам не нужен другой блок location. Обычный метод - изменить действие по умолчанию оператора try_files. Но из-за Эта проблема блок if может быть проще:
location ^~ /csv-import {
alias /var/www/csv-import/public;
if (!-e $request_filename) {
rewrite ^/csv-import/(.*)$ /csv-import/index.php?q=$1 last;
}
location ~ \.php$ {
...
}
error_log /var/log/nginx/csv-import.error.log;
access_log /var/log/nginx/csv-import.access.log;
}
Блок if заменяет оператор try_files. Оператор ^~ позволяет избежать двусмысленности с другими блоками location. См. это предупреждение об использовании if.