我需要有关配置的帮助。我的前端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? 预先感谢。
答案 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重定向有关的所有内容