【发布时间】:2016-02-10 09:16:14
【问题描述】:
所以我有一个运行在端口 8080 上的 tomcat 服务器,以及一个运行在端口 80 和 443 上的 apache 服务器。我可以使用这些虚拟主机让整个网站重定向到 https:
<VirtualHost *:80>
Redirect permanent / https://localhost
</VirtualHost>
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /etc/httpd/crt/localhost.crt
SSLCertificateKeyFile /etc/httpd/crt/localhost.key
ProxyRequests off
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /catdapp http://localhost:8080/
ProxyPassReverse /catdapp http://localhost:8080/
</VirtualHost>
但是,我试图让它只在 url 为 localhost/#/login 或 localhost/catdapp/#/login 时重定向到 https
我尝试了以下方法:
<VirtualHost *:80>
Redirect permanent /#/login https://localhost/#/login
Redirect permanent /catdapp/#/login https://localhost/#/login
ProxyRequests off
ProxyPreserveHost on
ProxyPass /#/login !
ProxyPass /catdapp/#/login !
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /catdapp http://localhost:8080/
ProxyPassReverse /catdapp http://localhost:8080/
</VirtualHost>
哪个不起作用,控制台显示它正在检索http://localhost/catdapp/partials/login.html,所以我尝试将其更改为:
<VirtualHost *:80>
Redirect permanent /catdapp/partials/login.html https://localhost/catdapp/partials/login.html
ProxyRequests off
ProxyPreserveHost on
ProxyPass /catdapp/partials/login.html !
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /catdapp http://localhost:8080/
ProxyPassReverse /catdapp http://localhost:8080/
</VirtualHost>
这会导致 Firefox 控制台输出两个错误:
GET http://localhost/catdapp/partials/login.html 301 Moved Permanently
GET https://localhost/catdapp/partials/login.html 200 OK
apache访问日志显示:
"GET /catdapp/partials/login.html HTTP/1.1" 301 328 "http://localhost" "Mozilla/5.0 (X11; Linux x84_64; rv:38.0) Gecko/20100101 Firefox/38.0"
"GET /catdapp/partials/login.html HTTP/1.1" 200 2054 "http://localhost" "Mozilla/5.0 (X11; Linux x84_64; rv:38.0) Gecko/20100101 Firefox/38.0"
有什么想法吗?
【问题讨论】:
标签: apache http tomcat redirect https