使用 Apache 2.2 根据主机名替换所有 URL

使用 Apache 2.2 根据主机名替换所有 URL

我正在为我的团队设置本地测试环境。我们每个人都有自己的子域名,指向我们内部网络上的机器。在代码中,URL 都用子域名书写www。我需要使用我们所有人共享的一个配置将这些子域名替换为配置所在的框的子域名。

我目前在所有开发机器上运行 Apache 2.4,并在条件块内使用mod_substitutemod_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>

有没有办法根据虚拟主机或主机名进行条件替换?

相关内容