首页 > 解决方案 > 如果虚拟文档根不存在,如何设置默认文档根?

问题描述

我已经使用 vhost_alias 设置了虚拟文档根目录,如果存在子域目录,它会很好用。但如果子域目录不存在,则会引发 403 错误。如果子域不存在,我想设置一个默认目录。

当前的虚拟主机配置

<VirtualHost *:80>
        ServerAlias *.domain.com
        VirtualDocumentRoot /home/ubuntu/www/domain/%1
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory "home/ubuntu/www/domain/*">
            Options Indexes FollowSymLinks
            AllowOverride All
            Order Allow,Deny
            Allow from all
            Require all granted
        </Directory>
</VirtualHost>

我尝试使用错误文档

ErrorDocument 403 http://app.domain.com% {REQUEST_URI}?%{QUERY_STRING}

但它会更改浏览器网址。有没有办法在内部重定向?我也尝试过重写,但这似乎不起作用。

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} !-d
RewriteRule %{DOCUMENT_ROOT} "/home/ubuntu/www/domain/app"  [QSA,L]

试过这个但不工作

标签: apachemod-rewritedocument-root

解决方案


找到解决方案

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT} !-d
RewriteRule (.*) http://app.domain.com/%{REQUEST_URI} [P,L]

在 Directory 指令中添加这个解决了我的问题。对于 SSL 站点,将其包含在 Virutalhost 块中

SSLProxyEngine on
ProxyPassReverse / https://app.domain.com/

推荐阅读