Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache2-使用小写子域为大写文件夹提供服务_Apache_Mod Rewrite_Virtualhost - Fatal编程技术网

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

Apache2-使用小写子域为大写文件夹提供服务,apache,mod-rewrite,virtualhost,Apache,Mod Rewrite,Virtualhost,目前,托管的网站使用test.mysite.com/{site}的以下结构,然后提供/var/www/test/{site} 我一直在尝试创建一个virtualhost,它可以匹配多个子域并为/var/www/test/下的文件夹提供服务。URL看起来像{site}.test.mysite.com 我尝试了几种方法,一种是使用虚拟文档根: <VirtualHost *:80> ServerName test.mysite.com ServerAlias *.test.

目前,托管的网站使用test.mysite.com/{site}的以下结构,然后提供/var/www/test/{site}

我一直在尝试创建一个virtualhost,它可以匹配多个子域并为/var/www/test/下的文件夹提供服务。URL看起来像{site}.test.mysite.com

我尝试了几种方法,一种是使用虚拟文档根:

<VirtualHost *:80>
    ServerName test.mysite.com
    ServerAlias *.test.mysite.com

    VirtualDocumentRoot /var/www/test/%1/
</VirtualHost>

ServerName test.mysite.com
ServerAlias*.test.mysite.com
VirtualDocumentRoot/var/www/test/%1/
这很有效,除了/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>

ServerName test.mysite.com
ServerAlias*.test.mysite.com
重新启动发动机
重写映射上限int:toupper
重写映射小写int:tolower
RewriteCond${小写:%{SERVER\u NAME}}^[a-z0-9-]+\.test\.mysite\.com$
重写规则^([a-z0-9]+)\.test\.mysite\.com/$/var/www/test/${upper:$1}/
然而,它似乎从未真正重写,只是继续为默认的apache文档根提供服务


我不希望由于其他依赖关系而不得不将所有文件夹的名称更改为小写。是否有其他选项可以执行此操作?

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

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

将apache配置为忽略区分大小写?是否尝试过符号链接?创建符号链接确实可以解决使用VirtualDocumentRoot时的问题,但这不是一个长期解决方案,因为基础文件夹结构会定期更改。必须始终手动添加/删除符号链接不是很实际。存在完全相同的问题。尝试了“CheckCaseOnly On”“/var/www/test/${upper:$1}”似乎没有任何效果…这是正确的,但op需要设置文档根目录,这将导致重定向,如
foo.test.mysite.com/var/www/test/foo
,我不认为这是我尝试过的预期结果,但是这会导致重定向到某物。test.mysite.com/index.html/index.html/index.html等。