Обработка нескольких сайтов 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" 

См. https://httpd.apache.org/docs/2.4/urlmapping.html

Другие вопросы по тегам