我正在配置apache来创建一个站点,该站点将使用mod_jk连接到在tomcat上运行的应用程序。
我只想要https请求来访问我的应用程序,我想使用mod_rewrite为端口80上的任何http请求返回404.
以下是我对VirtualHost配置的尝试
<VirtualHost *:80>
ServerName admin.app.com
RewriteEngine On
RewriteRule ^ [L,R=404]
</VirtualHost>
<VirtualHost *:443>
ServerName admin.app.com
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/bla.crt
SSLCertificateKeyFile /etc/apache2/ssl/bla.key
SSLCACertificateFile /etc/apache2/ssl/bla.ca
SSLProtocol all
SSLCipherSuite HIGHT:MEDIUM
JkMount /myapp*
</VirtualHost>
现在一切顺利https://admin.app.com/myapp - 我能够访问我的tomcat应用程序,确认mod_jk和我的SSL证书正在按预期工作,但是我使用http://返回的任何url请求400个不好的请求,而不是我期待的404。
我添加了RewriteLog和RewriteLogLevel 3并获得了以下输出
(2) init rewrite engine with requested uri /
(3) applying pattern '^' to uri '/'
(2) rewrite '/' -> '[L,R=404]'
(2) local path result: [L,R=404]
(2) init rewrite engine with requested uri /myapp/favicon.ico/
(3) applying pattern '^' to uri '/myapp/favicon.ico/'
(2) rewrite '/myapp/favicon.ico/' -> '[L,R=404]'
(2) local path result: [L,R=404]
我认为这意味着应该返回404s
我的问题是,当日志似乎正在将我的请求正确地重写为404时,为什么我收到400 Bad Request,此外,允许仅通过https访问网站的最佳做法是什么。
答案 0 :(得分:4)
您不应该使用代码404,因为问题不在于找不到页面,而是用户正在发出禁止请求。
相反,试试这个:
RewriteRule ^ - [F]
然后,您可以使用自定义403错误页面来解释只允许安全请求进入此路径。