【发布时间】:2025-11-23 00:00:01
【问题描述】:
当前托管的网站使用以下结构 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 rewrite
<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 文档根目录。
由于其他依赖项,我不希望将所有文件夹的名称更改为小写。还有其他选择吗?
【问题讨论】:
-
配置apache忽略大小写?
-
你试过符号链接吗?
-
创建符号链接确实可以解决使用 VirtualDocumentRoot 时的问题,但这不是一个长期的解决方案,因为底层文件夹结构会定期更改。必须一直手动添加/删除符号链接不是很实用。
-
有完全相同的问题。试过 "CheckCaseOnly On" "/var/www/test/${upper:$1}" 似乎没有任何效果......
标签: apache mod-rewrite virtualhost