我正在为我的团队设置本地testing环境。 我们每个人都有自己的子域,指向我们内部networking上的机器。 在代码中,URL的全部都是用www子域名写的。 我需要用configuration所在的盒子的这些子域名replace掉所有我们共享的configuration。
我目前在所有的开发机器上运行Apache 2.4,并在条件块中使用mod_substitute和mod_headers来实现这一点。 以下是使用此configuration的其中一个虚拟主机的示例:
<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块指向每个成员的符号链接与目标指向主要的Web目录(例如/var/www/nathans -> /var/www/html与<Directory "/var/www/nathans/>Substitutions...</Dirctory> )
有没有办法根据虚拟主机或主机名进行条件replace?