У меня есть несколько проектов 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/...
Как я могу устранить эти проблемы, изменив конфигурацию Apache?
Забыл все это про vhost. Все, что вам действительно нужно сделать, это установить Alias
es в вашем основном vhost:
Alias "/siteA" "/srv/http/some/dir/sfprojA"
Alias "/siteB" "/srv/http/some/other/dir/sfprojB"