VirtualDocumentRoot处理不存在的文件夹

时间:2015-02-20 10:55:58

标签: apache .htaccess virtualhost httpd.conf vhosts

使用Apache,我已经设置了VirtualDocumentRoot并且它以这种方式工作:

<VirtualHost *:80>
    UseCanonicalName Off
    ServerName app.example.com
    ServerAlias *.example.com
    VirtualDocumentRoot "/home/domains/example.com/%1"
    <Directory "/home/domains/example.com/*">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>

如果我输入http://mail.example.com的网址,则DocRoot会变为/home/domains/example.com/mail,如果是http://www.example.com,则DocRoot会变为/home/domains/example.com/www,依此类推。

现在我想检查文件夹是否存在,例如当用户请求http://myusername.example.com这样的域时,DocRoot检查/home/domains/example.com/myusername并且它不存在,所以它应该引用/home/domains/example.com/404。这可能吗?

我提到了以下问题,但没有好处:

2 个答案:

答案 0 :(得分:2)

如果您有映射到文件夹的虚拟子域,那么您是否只是检查文档根目录的存在?如果不存在,则重定向到404 subdomain/home/domains/example.com/404反过来应该使用<VirtualHost *:80> UseCanonicalName Off ServerName app.example.com ServerAlias *.example.com VirtualDocumentRoot "/home/domains/example.com/%1" <Directory "/home/domains/example.com/*"> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all RewriteEngine On RewriteCond %{DOCUMENT_ROOT} !-d RewriteRule ^(.*) http://404.example.com/ [R=301,L] </Directory> </VirtualHost> 或许这样。

%{DOCUMENT_ROOT}

或者,如果由于动态分配而没有 <VirtualHost *:80> UseCanonicalName Off ServerName app.example.com ServerAlias *.example.com VirtualDocumentRoot "/home/domains/example.com/%1" <Directory "/home/domains/example.com/*"> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all RewriteEngine On RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC] RewriteRule ^(.*)$ - [E=virt_path:%1,N,NS] RewriteCond %{DOCUMENT_ROOT}/%{ENV:virt_path} !-d RewriteRule ^(.*) http://404.example.com/ [R=301,L] </Directory> </VirtualHost> 变量拾取完整的virtualdocumentroot路径,可以通过将子域分配给env变量然后使用它来检查路径来尝试这种方式。

{{1}}

答案 1 :(得分:1)

确实有趣的问题。您需要在404部分中放置自定义<VirtualHost>处理程序来处理它。

<VirtualHost *:80>下方添加此行:

ErrorDocument 404 http://www.example.com/404.html

当您访问时,这将尝试打开/home/domains/example.com/www/404.html

http://myusername.example.com

文件系统中不存在相应的文件夹。