Apache:强制404状态代码

时间:2018-02-25 19:58:27

标签: apache tomcat mod-rewrite

我正在使用一个我无法修改的tomcat应用程序,尽管我可以完全控制在它前面设置的apache(使用反向代理)。

如果应用程序遇到不再有效的网址(即ID不再存在或格式错误),该应用程序将会重定向到pagenotavailable.jsp

我需要想办法让这些网址返回404,以便这些网址从搜索引擎索引中删除。

我提出的一种可能性是设置从pagenotavailable.jsp到我所做的名为404.html的网页的mod_rewrite重定向:

RewriteEngine on
RewriteRule ^/pagenotavailable\.jsp /404.html [NC,R=404,L]    

或者就是这样,因为404.html已经设置为ErrorDocument:

RewriteRule ^/pagenotavailable\.jsp$ - [R=404]

即显示我的自定义404.html页面的内容,但网址未更新(仍为pagenotavailable.jsp)且状态代码仍为302. < / p>

为什么我没有获得404,任何替代方法的任何想法都值得赞赏!

1 个答案:

答案 0 :(得分:1)

如果您使用302进行回复,则客户端将始终更新其网址(例如在网址栏中)以显示.../pagenotavailable.html。如果您希望它消失,则必须再次重定向到首选网址。唯一的另一种选择是修改应用程序,使其不执行重定向,而是完全在服务器端处理的“转发”。但是你特别提到你不能修改网络应用程序,所以... ...

如果状态代码仍为302,我会非常惊讶...当客户收到302响应时,它应对执行中提供的Location执行GET 302响应标头。如果有任何问题,如果响应代码未设置为404,我希望您的404.html内容有200回复​​。

[R=xxx]标记告诉mod_rewrite发出重定向,该重定向必须是3xx响应代码。你可以使用404,但你应该是aware of the caveats。该页面说明Location标题会发生什么(即没有),它表示它会暗示[L]标志,但它没有说明实际将哪些响应代码发送给客户端

如何使用RewriteRule将页面重写为实际不存在的内容?

RewriteRule ^pagenotavailabe.jsp$ /does-not-exist.html

...然后让你的标准404处理程序处理错误(并返回404.html的内容加上404协议响应)。