Apache设置反向代理后,默认主页将无效

时间:2018-12-17 01:46:21

标签: apache

我的服务器环境是Apache,版本是Apache / 2.4.18(Ubuntu)

站点配置文件如下:

<VirtualHost *:80>
    DirectoryIndex index.html index.php

    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/$1 -d
    RewriteRule (.*) - [END]
    # Else proxy
    RewriteRule ^/(.*)$ http://127.0.0.1:60000/$1 [P,QSA]
    ProxyPassReverse / http://127.0.0.1:60000/
    ProxyPreserveHost On
</VirtualHost>

当我仅使用index.php文件访问目录时,它将是反向代理,没有解析index.php

如果将DirectoryIndex更改为index.php index.html,将解决问题,但是上述问题将在index.html中发生。

当我删除反向代理时,index.php和index.html都将是正常的,并且不受顺序的影响。

所以问题可能出在:Apache仅在反向代理存在时才识别第一个DirectoryIndex,如果不存在,它将对反向代理进行替代,而不尝试使用它后面的默认主页。

我希望默认主页和反向代理可以和平共处。如何处理?

1 个答案:

答案 0 :(得分:0)

经过几次探索,我尝试了其他方法来实现功能。

<VirtualHost *:80>
    DirectoryIndex index.html

    RewriteEngine on
    #
    RewriteCond %{DOCUMENT_ROOT}/$1 -d
    RewriteCond %{DOCUMENT_ROOT}/$1/index.php -f
    RewriteRule ^/(.*)/$ /$1/index.php [P,END]
    #
    RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/$1 -d
    RewriteRule (.*) - [END]
    # Else proxy
    RewriteRule ^/(.*)$ http://127.0.0.1:60000/$1 [P,QSA]
    ProxyPassReverse / http://127.0.0.1:60000/
    ProxyPreserveHost On
</VirtualHost>

与上述配置一样,我仅保留一个默认主页,并使用反向代理方法实现其他默认主页的显示。

但是显然,这不一定是最好的方法,我希望有更好方法的合作伙伴可以提供信息