根据 URL 路径处理多个 Symfony 站点

根据 URL 路径处理多个 Symfony 站点

我有多个 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>

它可以运行(假设该项目配置为处理端口 10001 的 https),但是存在几个大问题:

  • 由于/siteA是重定向,最终用户看到的 URL http://my_ip:10000/...类似于http://my_ip/siteA/...
  • 它限制我为每个要公开的项目打开一个端口(或两个带有 https 的端口)。而且路由配置一点也不灵活,因为我每次都必须转到我的 ISP 的 Web 门户才能进行任何更改。

如何通过更改 Apache 配置来消除这些问题?

答案1

忘记了所有这些 vhost 内容。你真正需要做的就是设置Alias在您的主虚拟主机中:

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

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

相关内容