У меня есть перезапись в моем файле конфигурации 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/;
}