我有多个 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
是重定向,最终用户看到的 URLhttp://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"