У меня есть небольшое приложение, которое я хочу разместить по пути к каталогу в домене. В настоящее время у меня все работает нормально, используя предоставленный тонкий файл по умолчанию, но я хотел бы установить правило перезаписи.
Правило перезаписи, которое я хочу, заключается в том, чтобы принимался только любой URL-адрес с префиксом / foobar / с / foobar / stripped прочь, пока он не ударил Вот эквивалентное правило перезаписи в моей конфигурации apache, которое я ранее использовал и работало именно так, как я хотел:
RewriteEngine On
RewriteRule ^/foobar(/.*) /foobar/public/index.php$1 [QSA,L]
Мы используем это правило перезаписи так, чтобы параметр $ _SERVER ['REQUEST_URI'] оставался полным « http: // localhost / foobar / test », но путь (по которому Slim соответствует маршруту) - это просто «/ test», поэтому нам не нужно явно создавать группу маршрутов.
Моя конфигурация nginx на данный момент выглядит так:
server {
listen 80;
server_name www.mysite.com mysite.com;
root /var/www/mysite/foobar/public;
# This is what I have tried adding, to no avail
rewrite ^/foobar(/.*) /index.php$1 break;
try_files $uri /index.php;
location /index.php {
fastcgi_connect_timeout 3s;
fastcgi_read_timeout 10s;
fastcgi_pass app:9000; # "app" is a docker container
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Я уже несколько часов пробую различные правила. Я не совсем уверен, что делаю, очевидно, не понимаю, как работает nginx, и я уверен, что эксперт по nginx уже знает правильный ответ. Если есть кто-нибудь, кто может предоставить информацию о том, где я ошибаюсь, я был бы очень признателен!
Заранее спасибо!
Обновленная попытка:
server {
listen 80;
server_name www.mysite.com mysite.com;
root /var/www/mysite;
index index.php;
location ~ ^/foobar(/.*)$ {
root /var/www/mysite/foobar/public;
fastcgi_connect_timeout 3s;
fastcgi_read_timeout 10s;
fastcgi_pass app:9000;
include fastcgi_params;
fastcgi_param PATH_INFO $1;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
}
Вы правы, у nginx другая логика с редиректами.
Этот подход может сработать для вас. Однако я не использовал nginx с программным обеспечением, которое использует подобные шаблоны, поэтому я не уверен, что это сработает. Кроме того, это может быть неоптимальным способом выполнения этого.
location ~ ^/foobar(/.*)$ {
fastcgi_connect_timeout 3s;
fastcgi_read_timeout 10s;
fastcgi_pass app:9000; # "app" is a docker container
include fastcgi_params;
fastcgi_param PATH_INFO $1;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}