我正在使用一个我无法修改的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,任何替代方法的任何想法都值得赞赏!
答案 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协议响应)。