VirtualDocumentRoot处理不存在的文件夹

使用Apache,我已经build立了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的URL,DocRoot变成/home/domains/example.com/mail ,如果是http://www.example.com ://www.example.com,DocRoot变成/home/domains/example.com/www ,等等。

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

我提到了下面的问题,但没有成功:

  • VirtualDocumentRoot域和子域
  • Apache VirtualDocumentRootredirect不存在的域

如果你有映射到文件夹的虚拟子域名,那么你不能检查文件根目录的存在吗? 如果不存在,则重定向到404 subdomain ,而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> 

或者如果完整的virtualdocumentroot路径由于动态分配而没有被%{DOCUMENT_ROOT}变量拾取,那么可以通过将子域指定为env变量来尝试这种方式,然后使用它来检查路径。

  <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> 

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

<VirtualHost *:80>下面添加这行:

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

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

 http://myusername.example.com 

并且相应的文件夹不存在于您的文件系统中。