Nginx переписать на index.php? q = $ uri

Мне нужно обновить хост 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.

Я уверен, что есть решение, которое работает идеально, но я не мог его придумать.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
510
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужен другой блок 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.

Другие вопросы по теме