如果URL通过proxypass指向另一个Web服务器,则重定向到https

时间:2019-01-19 20:25:09

标签: apache .htaccess

我需要有关配置的帮助。我的前端Web服务器具有一个.htaccess,其配置如下:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/?(dir_a|dir_b|dir_c)
RewriteCond %{QUERY_STRING} !^/?(dir_a|dir_b|dir_c)
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]    
DirectoryIndex index.php

因此,前端服务器上的dir_a,dir_b和dir_c不会重定向到https。如果省略了https,或者当一个人输入我网站的URL时使用http,则前端服务器上的所有内容都会正确重定向到https。指向内部网络服务器的位置不会发生这种情况,即我的apache2.conf中有

<VirtualHost *:443>
  ...
  ServerName example.com
  SSLEngine on
  SSLProxyEngine On
  ...
</VirtualHost>
...
<Location /backsrvdir>
  SSLRequireSSL
  ProxyPass http://192.168.x.y/backsrvdir
  ProxyPassReverse http://192.168.x.y/backsrvdir
</Location>

在backsrvdir中,我还有另一个.htaccess及其DirectoryIndex bsindex.php。 它仅在链接已经包含https:的情况下起作用,因此,如果我编写或单击https://example.com/backsrvdir可以,如果省略https:或使用http :,则前端服务器将响应“ 403禁止:您没有权限”以访问此服务器上的/ backsrvdir /。Apache / 2.2.22(Debian)服务器位于example.com端口80“。 如上所述,端口80仅对dir_a dir_b和dir_c开放。 是否有解决问题的想法,并将http://example.com/backsrvdir重定向到https://example.com/backsrvdir? 预先感谢。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

<VirtualHost *:80>
  ...
  Redirect permanent /backsrvdir https://example.com/backsrvdir
  # Remove the other 3 lines:
  # SSLRequireSSL
  # ProxyPass http://192.168.x.y/backsrvdir
  # ProxyPassReverse http://192.168.x.y/backsrvdir
  ...
</VirtualHost>

还从.htaccess删除与https重定向有关的所有内容