Apache: como sempre retornar 404s para URLs cujo componente de caminho começa com “//”

2

Como eu configuro o apache para sempre retornar um 404 para URLs cujo componente de caminho começa com duas barras (por exemplo, "//")?

Recebemos essas solicitações apenas de bots que não entendem URLs relativos a esquemas (portanto, quando vêem um URL como "//somecdn.com/thingy.js", eles solicitam " link "). Eles recebem uma resposta 404, o que é bom. O problema é que o 404 vem do nosso código do Django, que obedientemente nos envia um e-mail dizendo que alguém recebeu um erro 404 e seu referenciador era nosso site.

Veja nossa configuração relevante do apache:

DocumentRoot /nowhere

Alias /static/ /our/static/files
Alias /uploads/ /our/uploaded/files

<VirtualHost :*80>

  ServerName oursite.com

  WSGIScriptAlias / /our/wsgi/script

</VirtualHost>

Eu tentei inserir RedirectMatch 404 "^//" After DocumentRoot , mas a solicitação ainda acabou no script WSGI. Alterar o regex para "^/.*$" 404 tinha todas as solicitações (como seria de se esperar). "^\/\/" não parece corresponder a nada.

Estou assumindo que estou entrando em conflito com algum tipo de% / squashing, mas não sei como contornar isso.

Este Apache 2.2.22 com mod_wsgi 3.3 no Ubuntu 12.04.

    
por morganwahl 26.11.2014 / 17:52

1 resposta

2

Você pode usar um RewriteCond em % {THE_REQUEST} :

THE_REQUEST

The full HTTP request line sent by the browser to the server (e.g., "GET /index.html HTTP/1.1"). This does not include any additional headers sent by the browser. This value has not been unescaped (decoded), unlike most other variables below.

O que, ao contrário de% {REQUEST_URI}, já não foi decodificado ou tem barras duplicadas dobradas.

# method, space(s), then URL
RewriteCond %{THE_REQUEST} ^\S+\s+//
RewriteRule .* - [R=404]
    
por 02.12.2014 / 02:01

Tags