Apache动态通配符主机使用动态子域重写

时间:2015-07-28 09:22:44

标签: apache mod-rewrite url-rewriting apache2 apache2.2

  

我目前正在将旧的apache vhost转换为动态主机,其中当前为每个新版本创建了一个,因此我们不会# 39;必须始终创造一个新的。我需要一些帮助!我们正在使用 apache v2.2

目标

动态所有的事情。拥有一个虚拟主机来处理特定子域集的所有重定向。该网址位于下方,请注意sub1branch 动态,可以是任何内容。

sub1.branch.sandbox.domain.com

目录结构如下:

/var/www/vhosts/branch/sub1.branch.sandbox.domain.com

如上所示,在完整url是另一个子目录的名称之前,目录结构将branch作为子目录。

此外,网址中的/images/需要转发到每个域的shared-httpdocs/images

到目前为止我的vhost

<VirtualHost *:80>
        ServerName branch.sandbox.domain.com
        ServerAlias *.branch.sandbox.domain.com

        VirtualDocumentRoot /var/www/vhosts/branch/%0

        Options Indexes FollowSymLinks

        # Rewrite Engine Stuff Here
        RewriteEngine On

        DirectoryIndex index.php

        # Assets needs to be forwarded - currently not working
        RewriteCond %{REQUEST_URI} ^/(css|js|images)/.*
        RewriteRule .*$ /var/www/vhosts/%0/shared-httpdocs/%1$ [L]

        # The HTTP dispatcher - currently not working
        RewriteCond %{HTTP_HOST} ^(.*)\.branch\.sandbox\.domain\.com [NC]
        RewriteRule ^(.*)$ /var/www/vhosts/%1/applications/portal/dispatchers/http.php [L,QSA,NS,NE,NC]
</VirtualHost>

旧主持人我试图复制

这是我尝试转换的旧虚拟主机。它太可怕了,我们的操作每次都要创建一个新的DNS条目。真是笑话!我需要解决这个问题......

<VirtualHost *:80>
    # Notice how the stupid convention below will require a new DNS entry each time?
    ServerName sandbox.branch.domain.com
    ServerAlias sandbox.api.branch.domain.com

    DocumentRoot /var/www/vhosts/sandbox.branch.domain.com/applications/portal/httpdocs

    <Directory "/var/www/vhosts/sandbox.branch.domain.com/applications/portal/httpdocs">
            allow from all
            order allow,deny
            # Enables .htaccess files for this site
            #AllowOverride All

            RewriteEngine On

            # Rewrite all non-static requests to go through the webapp
            RewriteCond %{REQUEST_URI} ^/(css|js|images)/.*
            RewriteRule .* - [L]

            # Rewrite everything else to go through the webapp
            RewriteRule ^(.*)$ /dispatchers/http.php [QSA,L]

    </Directory>

    <Directory  "/var/www/vhosts/sandbox.branch.domain.com/applications/portal/dispatchers">
        allow from all
    </Directory>

    # Allow us to rewrite to the webapp without it being in the webroot
    Alias /dispatchers /var/www/vhosts/sandbox.branch.domain.com/applications/portal/dispatchers

    # Get shared/ to point to the shared static resources
    Alias /shared /var/www/vhosts/sandbox.branch.domain.com/shared-httpdocs

</VirtualHost>

每次我们有一个新的分支时都需要一个新的DNS条目,所以我试图通过提供一个动态子域vhost来缓解这个问题(参见到目前为止的vhost)。我甚至无法将网址中的/images/与永久重定向循环相匹配。

我如何实现目标?我知道它有点复杂。如果我不能这样做,我只需要编写一个脚本,每次都会生成一个新的虚拟主机,但是一个动态的虚拟主机才能正常工作。太棒了到目前为止,我已经花了两天时间,我没有系统管理员。非常感谢您的帮助。

我一直在使用的资源:

1 个答案:

答案 0 :(得分:2)

这不是一个完整的答案,但是评论太长了。

重写规则中的%0%0%9)是对最后一次RewriteCond中捕获的反向引用。在我看来,你想要的是主机名。此外,你似乎错过了路径的“分支”部分。在Asset的重写中,你也丢弃了文件名部分。

# Assets needs to be forwarded - currently not working
RewriteCond %{REQUEST_URI} ^/(css|js|images)/(.*)
RewriteRule .*$ /var/www/vhosts/branch/%{HTTP_HOST}/shared-httpdocs/%1/%2$ [L]


# The HTTP dispatcher - currently not working
RewriteCond %{HTTP_HOST} ^(.*)\.branch\.sandbox\.domain\.com [NC]
RewriteRule ^(.*)$ /var/www/vhosts/branch/%{HTTP_HOST}/applications/portal/dispatchers/http.php [L,QSA,NS,NE,NC]

您也可以使用RewriteLog和RewriteLogLevel指令从mod_rewrite专用日志记录获得调试帮助。

希望这会带给你更多。