Назад | Перейти на главную страницу

Обработка нескольких сайтов 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), но есть несколько больших проблем:

Как я могу устранить эти проблемы, изменив конфигурацию Apache?

Забыл все это про vhost. Все, что вам действительно нужно сделать, это установить Aliases в вашем основном vhost:

Alias  "/siteA" "/srv/http/some/dir/sfprojA" 
Alias  "/siteB" "/srv/http/some/other/dir/sfprojB" 

Видеть https://httpd.apache.org/docs/2.4/urlmapping.html