1

我正在配置 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]

我解释为应该返回 404

我的问题是,当日志似乎将我的请求正确地重写为 404 时,为什么我会收到 400 Bad Request,此外,关于只允许通过 https 访问网站的最佳做法是什么。

4

1 回答 1

4

您不应该使用代码 404,因为问题不在于找不到页面,而在于用户正在发出禁止请求。

相反,试试这个:

RewriteRule ^ - [F]

然后您可以使用自定义的 403 错误页面来说明该路径只允许安全请求。

于 2013-03-21T19:29:22.183 回答