Обработка нескольких сайтов Symfony в зависимости от пути URL
У меня есть несколько проектов Symfony, каждый из которых хранится в пользовательских подкаталогах внутри /srv/http
; эти подкаталоги не предназначены для публичных URL. Например:
/srv/http/some/dir/sfprojA
/srv/http/some/other/dir/sfprojB
...
Примечание. У меня есть только личный IP-адрес без зарегистрированного домена, и я использую Apache 2.4.
Я хотел бы связать каждый из этих проектов с простым URL-адресом (по одному на сайт) с прозрачной перезаписью для конечного пользователя. Например, http://my_ip/siteA
будет ссылаться на sfprojA
маршрут по умолчанию, http://my_ip/siteA/css/mystyle.css
будет ссылаться на данную таблицу стилей и т.д...
На данный момент единственный способ управлять несколькими сайтами Symfony - это использовать функцию виртуальных хостов Apache:
Listen 10000
Listen 10001 https
<Location /siteA>
Redirect http://my_ip:10000
</Location>
<VirtualHost *:10000>
DocumentRoot /srv/http/some/dir/sfprojA/web
<Directory /srv/http/some/dir/sfprojA/web>
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
</VirtualHost>
<VirtualHost *:10001>
DocumentRoot /srv/http/some/dir/sfprojA/web
SSLEngine on
SSLCertificateFile "/etc/httpd/conf/ssl/mycert.crt"
SSLCertificateKeyFile "/etc/httpd/conf/ssl/mycert.key"
<Directory /srv/http/some/dir/sfprojA/web>
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
</VirtualHost>
Он работает (при условии, что проект был настроен для обработки https с портом 10001), но есть несколько больших проблем:
- Так как
/siteA
это перенаправление, конечный пользователь видит URL-адреса какhttp://my_ip:10000/...
вместоhttp://my_ip/siteA/...
- Это заставляет меня открыть один порт (или два порта с https) для КАЖДОГО проекта, который я хочу обнародовать. И конфигурация маршрутизации совсем не гибкая, потому что мне приходится каждый раз заходить на веб-портал моего интернет-провайдера, чтобы что-то изменить.
Как я могу устранить эти проблемы, изменив конфигурацию Apache?
1 ответ
Забыл все это хлам. Все, что вам действительно нужно сделать, это установить Alias
es в вашем главном vhost:
Alias "/siteA" "/srv/http/some/dir/sfprojA"
Alias "/siteB" "/srv/http/some/other/dir/sfprojB"