使用mod_rewrite为http上的所有请求返回404

时间:2013-03-21 18:49:26

标签: apache mod-rewrite rewrite http-status-code-404

我正在配置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访问网站的最佳做法是什么。

1 个答案:

答案 0 :(得分:4)

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

相反,试试这个:

RewriteRule ^ - [F]

然后,您可以使用自定义403错误页面来解释只允许安全请求进入此路径。