如何configurationapache总是返回一个404的URL,其path组件以两个斜线(即“//”)开头?
我们只能从不了解与scheme相关的URL的机器人获得这样的请求(所以当他们看到像“//somecdn.com/thingy.js”的URL时,他们请求“ http://oursite.com//somecdn .com / thingy.js “)。 他们得到了一个404响应,这很好。 问题是404来自我们的Django代码,它忠实地然后发送给我们一封电子邮件,说有人得到了404,他们的引用是我们的网站。
这是我们相关的apacheconfiguration:
DocumentRoot /nowhere Alias /static/ /our/static/files Alias /uploads/ /our/uploaded/files <VirtualHost :*80> ServerName oursite.com WSGIScriptAlias / /our/wsgi/script </VirtualHost>
我尝试插入RedirectMatch 404 "^//" DocumentRoot之后,但请求仍然以WSGI脚本结束。 每个请求更改正则expression式为"^/.*$" /。* "^/.*$" 404(如我所料)。 "^\/\/"似乎没有匹配任何东西。
我假设我正在碰撞某种多重/挤压,但我不知道如何绕过它。
这个Apache 2.2.22在Ubuntu 12.04上使用mod_wsgi 3.3。
您可以在%{THE_REQUEST}上使用RewriteCond:
THE_REQUEST
浏览器发送给服务器的完整HTTP请求行(例如,“GET /index.html HTTP / 1.1”)。 这不包括浏览器发送的任何附加标题。 与以下大多数其他variables不同,此值尚未经过转换(解码)。
不像%{REQUEST_URI}不会被解码或者折叠了重复的斜杠。
# method, space(s), then URL RewriteCond %{THE_REQUEST} ^\S+\s+// RewriteRule .* - [R=404]