我的团队的服务器设置如下:我们有一个域名,这似乎已经是公司域名的子域名。我们希望在该域下托管多个应用程序。我们甚至希望为服务器上的每个应用提供生产版本和登台版本。
文档根目录是一个空文件夹。应用程序位于文档根目录之外。 我们正在尝试使用URL路径中的第一个令牌来找出我们尝试访问的应用,然后以某种方式(内部或外部)重定向至该应用。
这里的结构等同于目录的组织方式。
/usr/local/var/www <- Document Root
/usr/local/var/app1 <- application 1
------------------/public/index.php
------------------/public/css
/usr/local/var/app2 <- application 2
/usr/local/var/app1.stg <- application 1 staging version,code is exactly the same as application1
/usr/local/var/app2.stg <- application 2 staging version,code is exactly the same as application2
这是httpd.conf中的相关设置
DocumentRoot /usr/local/var/www
<Directory "/usr/local/var/www">
AllowOverride None
Require all granted
</Directory>
Alias "/app1" "/usr/local/var/app1"
Alias "/app2" "/usr/local/var/app2"
<VirtualHost *:80>
# rewriting rules to make the routing work
# There is only one vhost so it can actually be removed
</VirtualHost>
当我们访问https://sub.domain.com/app1
时,我们希望转到app1
当我们访问https://sub.domain.com/app1.stg
时,我们希望转到app1.stg
应用程序是用PHP编写的。这种服务器配置意味着我们必须在路由和重写规则中包括“应用程序的路径”,并在所有资源引用中使用“完整的绝对路径”。 例如,一条路线看起来像
$router->map("GET","/app1/action",SomeController);
css引用将是:(即使给出了相对路径,其行为也类似于DocRoot的相对路径(前面带有“ /”。您可以在此详细的post中看到它)
<link href="app1/public/css/style.css" type="text/css" rel="stylesheet"/>
这些内容足以使两个应用程序都能正常工作,但暂存版本将无法正常工作,因为它包含完全相同的代码副本(按预期的方式进行,以便在暂存环境中进行测试,然后推送到生产环境)。 如果我希望两个版本均能工作,则必须动态编码路径,即使用CONTEXT_DOCUMENT_ROOT或其他服务器变量来确定其所在的应用程序版本,并具有两个路由副本,一个以app1开头,另一个以app1.stg开头。 。对于每个版本,我还必须有单独的重写规则。
问题
应用服务器设置限制(一个域名,按照我所描述的方式区分应用程序,等等。),是否可以仅使用相对路径,仅将路径写入应用程序本身?像这样:
<link href="css/style.css" type="text/css" rel="stylesheet"/>
$router->map("GET","/action",SomeController);
换句话说,我必须在约束范围内更改服务器设置,以便可以以某种方式编写应用程序而不必关心服务器的设置。
我知道一种方法是为每个应用程序/版本使用不同的端口,但是显然服务器管理员不喜欢这个主意。
我已将问题分解为this question中的步骤。它很长,但是如果您愿意遵循,它应该提供更多的细节。
如果问题不够清楚,则per-user directory看起来很像我想要实现的目标。但是,我希望使用应用程序目录代替用户目录,而不是用户目录。当然,我从来没有使用过每个用户的目录,所以我不知道它是否确实按照我认为的方式运行。
所以我知道我们可以在/ etc / hosts中将多个主机名映射到一个IP地址。我可以仅使用该主机名作为apache config中的ServerName,并通过键入该主机名在浏览器中进行访问吗?该网站仅供内部使用,因此只能在公司网络内访问。
在/ etc / hosts中:
123.45.67.89 app1.team-server-name app2.team-server-name
在httpd.conf中:
<VirtualHost>
ServerName app1.team-server-name
DocumentRoot /usr/local/var/app1/public
</VirtualHost>
<VirtualHost>
ServerName app2.team-server-name
DocumentRoot /usr/local/var/app2/public
</VirtualHost>