Назад | Перейти на главную страницу

как удалить блок местоположения из $ uri в конфигурации nginx?

У меня есть перезапись в моем файле конфигурации ngix, который работает правильно, за исключением того, что он, кажется, включает блок местоположения как часть переменной $ uri. Мне нужен только путь после блока местоположения. Мой текущий код конфигурации:

location /cargo {
    try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}

Используя пример URL-адреса http://localhost/cargo/testpage перенаправление работает, однако значение параметра «_REWRITE_COMMAND», полученного моим файлом php, равно «/ cargo / testpage». Мне нужно удалить блок местоположения и просто указать "тестовую страницу" в качестве $ uri

Я почти уверен, что существует синтаксис регулярного выражения для разделения $ uri и присвоения его новой переменной с использованием $ 1 $ 2 и т. Д., Но я не могу найти ни одного примера, чтобы выполнить просто присвоение переменной с использованием регулярного выражения, которое не является частью перезаписи заявление. Я искал и пытался часами, и, похоже, я просто не могу пройти этот последний шаг.

Я также знаю, что могу просто убрать это из кода приложения, но причина, по которой я хочу попытаться исправить это в nginx conf, связана с соображениями совместимости, поскольку он также работает на Apache. Я также должен сказать, что нашел действительно хакерский способ сделать это, но он включает в себя оператор «if» для проверки наличия файла, а в документации конкретно говорится не сделать это так.

Оглядываясь вокруг, я бы предположил, что проще всего использовать местоположение с регулярным выражением с захватами. Адаптируя ваш пример, я получаю:

location ~ ^/cargo(.*) {
    try_files $1 $1/ /cargo/index.php?_REWRITE_COMMAND=$1&args;
}

Я нашел еще одну вещь, которая сработала для меня (так как я использую Gunicorn, я не могу выбрать, что передать)

Тебе должно сойти с рук

location /cargo {
    rewrite ^/cargo(.*)$ $1 break;
    try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}

Для тех, кто изо всех сил пытается добавить его для микросервиса или API с Node JS, я использовал следующее, чтобы удалить api с URL-адреса на моем сервере:

location ^~ /api {
        rewrite ^/api(/.*)$ $1 break;
        proxy_pass    http://127.0.0.1:3001/;
    }