当前托管的网站使用以下test.mysite.com/{site}结构,然后提供/ var / www / test / {site}
我一直在尝试创建一个虚拟主机,该主机可以匹配多个子域并为/ var / www / test /下的文件夹提供服务。网址看起来像{site} .test.mysite.com
我尝试了几种方法,一种使用虚拟文档根目录:
<VirtualHost *:80>
ServerName test.mysite.com
ServerAlias *.test.mysite.com
VirtualDocumentRoot /var/www/test/%1/
</VirtualHost>
这很好用,除了/ var / www / test /下的文件夹是大写的而且我似乎无法将%1转换为大写。
另一种方法是使用apache网站上指定的mod重写
<VirtualHost *:80>
ServerName test.mysite.com
ServerAlias *.test.mysite.com
RewriteEngine on
RewriteMap upper int:toupper
RewriteMap lowercase int:tolower
RewriteCond ${lowercase:%{SERVER_NAME}} ^[a-z0-9-]+\.test\.mysite\.com$
RewriteRule ^([a-z0-9]+)\.test\.mysite\.com/$ /var/www/test/${upper:$1}/
</VirtualHost>
但是,它似乎从未真正重写过,只是继续提供默认的Apache文档根。
由于其他依赖性,我不想不必将所有文件夹的名称更改为小写。还有其他选择吗?
答案 0 :(得分:1)
您的规则是错误的:此处的RewriteRule仅适用于不包含主机的URL的完整路径。试试:
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.test\.mysite\.com$
RewriteRule .* /var/www/test/${upper:%1}$0 [L]