У меня есть виртуальная машина с несколькими приложениями для разработки. Базовый веб-каталог выглядит так:
/var/web/subdoms/:
index.php
MyApp/
SomeOtherApp/
У меня есть файл конфигурации Nginx, в котором корень указан как / var / web / subdoms, например:
http://myserver/ -> /var/web/subdoms/index.php.
В подкаталоге MyApp находится проект Symfony2. В каталоге SomeOtherApp находится общее приложение perl-cgi
http://myserver/SomeOtherApp -> /var/web/subdoms/SomeOtherApp/index.pl
Запросы к MyApp необходимо перенаправлять в подкаталог, например:
http://myserver/MyApp/ -> /var/web/subdoms/MyApp/symfony/web/
Оттуда запросы необходимо переписать, чтобы запросы доставлялись в app.php ala:
http://myserver/MyApp/ -> /var/web/subdoms/MyApp/symfony/web/app.php
http://myserver/MyApp/hello/you -> /var/web/subdoms/MyApp/symfony/web/app.php/hello/you
Я могу сделать это, установив свой корень: / var / web / subdoms / MyApp / symfony / web / и запросив без «MyApp», следуя примерам из документации Symfony. Однако, когда я пытаюсь вложить приложение в один каталог (чтобы мой сервер мог обслуживать несколько приложений в одном домене вместо того, чтобы доминировать над приложением Symfony), часть «MyApp» добавляется к url ala:
http://myserver.com/MyApp/hello/you -> /var/web/subdoms/MyApp/symfony/web/app.php/MyApp/hello/you
Затем symfony жалуется, что не может найти маршрут «MyApp / hello / you». Я мог бы решить эту проблему, добавив «MyApp» ко всем моим маршрутам Symfony, но это кажется неуклюжим. Я бы предпочел найти способ через Nginx перенаправить каталог без URL-адреса в Symfony.
Если это поможет, вот моя текущая конфигурация nginx (с удаленными другими приложениями):
server {
listen 80;
server_name myserver;
root /var/web/subdoms;
error_log /var/log/nginx/rr_error.log;
access_log /var/log/nginx/rr_access.log;
location /MyApp/ {
rewrite ^/MyApp/(.*)$ /MyApp/symfony/web/app_dev.php/$1 last;
}
#was the way to redirect requests to app_dev.php when MyApp/Symfony/web was root
location @rewriteRR {
rewrite ^(.*)$ /app_dev.php/$1 last;
}
location ~ \.php(/|$) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_pass 127.0.0.1:9000;
}
location ~ /\.ht {
deny all;
}
}
В заключение я понимаю, что, вероятно, лучше всего использовать субдомен для разделения приложений (или нескольких доменов), но, как было сказано ранее, это сервер разработки. Разделение его между поддоменами, разными хостами и т. Д. Было бы слишком дорогостоящим для того, что это такое. Мне нужно хранить все это на одном и том же хосте / домене по соображениям стоимости (сертификаты SSL / плата за хостинг), избегая при этом самоподписывания моих сертификатов (потому что во время разработки приложения используются другими людьми в случайном контексте и самозаверяющие ошибки раздражают их).