我正在为我的团队设置本地测试环境。我们每个人都有自己的子域名,指向我们内部网络上的机器。在代码中,URL 都用子域名书写www
。我需要使用我们所有人共享的一个配置将这些子域名替换为配置所在的框的子域名。
我目前在所有开发机器上运行 Apache 2.4,并在条件块内使用mod_substitute
和mod_headers
来实现此目的。以下是使用此配置的虚拟主机之一的示例:
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerAlias nathans-dev.example.com robertr-dev.example.com justinb-dev.example.com
ServerName www.example.com
ErrorLog "logs/example-errors.log"
SetOutputFilter INFLATE;SUBSTITUTE;DEFLATE
AddOutputFilterByType SUBSTITUTE text/html
AddOutputFilterByType SUBSTITUTE text/xml
AddOutputFilterByType SUBSTITUTE text/css
AddOutputFilterByType SUBSTITUTE application/xml
AddOutputFilterByType SUBSTITUTE application/json
AddOutputFilterByType SUBSTITUTE application/javascript
<If "%{HTTP_HOST} == 'nathans-dev.example.com'">
Substitute "s|//www\.example\.com|//nathans-dev.example.com|iq"
Header always edit Location "//www.example.com" "//nathans-dev.example.com"
Header edit Location "//www.example.com" "//nathans-dev.example.com"
Header edit Set-Cookie "domain=(?:www\.)?example\.com" "domain=nathans-dev.example.com"
</If>
<ElseIf "%{HTTP_HOST} == 'robertr-dev.example.com'">
Substitute "s|//www\.example\.com|//robertr-dev.example.com|iq"
Header always edit Location "//www.example.com" "//robertr-dev.example.com"
Header edit Location "//www.example.com" "//robertr-dev.example.com"
Header edit Set-Cookie "domain=(?:www\.)?example\.com" "domain=robertr-dev.example.com"
</ElseIf>
# ... SNIP ...
</VirtualHost>
问题是我们在生产环境中运行的是 Apache 2.2。这是阻止我镜像生产环境的最后一项。条件If
指令在 2.2 上不存在,我尝试了很多方法尝试使用 2.2 使其工作,但没有成功。
我曾尝试为团队的每个成员使用虚拟主机,使用Directory
指向每个成员的符号链接的块,目标指向主网络目录(/var/www/nathans -> /var/www/html
例如<Directory "/var/www/nathans/>Substitutions...</Dirctory>
)
有没有办法根据虚拟主机或主机名进行条件替换?