我目前正在将旧的apache vhost转换为动态主机,其中当前为每个新版本创建了一个,因此我们不会# 39;必须始终创造一个新的。我需要一些帮助!我们正在使用 apache v2.2 。
动态所有的事情。拥有一个虚拟主机来处理特定子域集的所有重定向。该网址位于下方,请注意sub1
和branch
动态,可以是任何内容。
sub1.branch.sandbox.domain.com
目录结构如下:
/var/www/vhosts/branch/sub1.branch.sandbox.domain.com
如上所示,在完整url是另一个子目录的名称之前,目录结构将branch
作为子目录。
此外,网址中的/images/
需要转发到每个域的shared-httpdocs/images
。
<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/
与永久重定向循环相匹配。
我如何实现目标?我知道它有点复杂。如果我不能这样做,我只需要编写一个脚本,每次都会生成一个新的虚拟主机,但是一个动态的虚拟主机才能正常工作。太棒了到目前为止,我已经花了两天时间,我没有系统管理员。非常感谢您的帮助。
我一直在使用的资源:
REWRITE_COND
答案 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专用日志记录获得调试帮助。
希望这会带给你更多。