Apache2-使用小写子域提供大写文件夹

时间:2018-10-04 11:51:23

标签: apache mod-rewrite virtualhost

当前托管的网站使用以下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文档根。

由于其他依赖性,我不想不必将所有文件夹的名称更改为小写。还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

您的规则是错误的:此处的RewriteRule仅适用于不包含主机的URL的完整路径。试试:

RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.test\.mysite\.com$           
RewriteRule .* /var/www/test/${upper:%1}$0 [L]