VirtualDocumentRoot 处理不存在的文件夹

2023-12-23

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

如果我输入 URLhttp://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。这可能吗?

我提出了以下问题,但没有什么好处:

  • VirtualDocumentRoot 域和子域 https://stackoverflow.com/questions/21478511/virtualdocumentroot-domains-and-subdomains
  • Apache VirtualDocumentRoot 重定向不存在的域 https://stackoverflow.com/questions/20971407/apache-virtualdocumentroot-redirect-non-existing-domains

如果您有映射到文件夹的虚拟子域,那么您不能只检查文档根目录是否存在吗?如果不存在则重定向到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}由于动态分配而导致变量,也许可以通过将子域分配给环境变量来尝试这种方式,然后使用它来检查路径。

  <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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VirtualDocumentRoot 处理不存在的文件夹 的相关文章

随机推荐