Mijn website draait op Apache 1.3.33 @ Windows 2000 Server en ik wil graag backslashes en geneste forward slashes uit de URI slopen, omdat deze vervelende gevolgen kunnen hebben. Ik heb o.a. de volgende RewriteRule in de httpd.conf zitten:
Bijvoorbeeld: http://balusc.xs4all.nl/\/\\//\\\///
Levert op:
Dit komt dus doordat de (.*) blijkbaar een hogere prioriteit heeft dan \\+ en //+. Ik verwachtte eigenlijk dat de regexp gewoon van links naar rechts wordt gelezen. Hoe kan ik dit het beste afvangen? Ik heb bijvoorbeeld dit geprobeerd:

\+ moet / worden.
//+ moet / worden.
En dat allemaal in 1 cycle.
code:
Werkt allemaal prima, echter in de logs zie ik bijvoorbeeld dat de \\+ en //+ niet meerdere slashes vervangen, maar slechts één tegelijkertijd.1
2
| RewriteRule ^(.*)\\+(.*)$ $1/$2 [R=301,L] RewriteRule ^(.*)//+(.*)$ $1/$2 [R=301,L] |
Bijvoorbeeld: http://balusc.xs4all.nl/\/\\//\\\///
Levert op:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET /\\/\\\\//\\\\\\///" 335 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET /\\/\\\\//\\\\////" 333 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET /\\/\\\\//\\/////" 331 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET /\\/\\\\////////" 329 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET /\\/\\/////////" 327 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET /\\///////////" 325 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 200 + "GET /////////////" 5 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET /////////////srv/wel.html" 336 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET ////////////srv/wel.html" 335 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:48 10.0.0.152 - 301 + "GET ///////////srv/wel.html" 334 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET //////////srv/wel.html" 333 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET /////////srv/wel.html" 332 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET ////////srv/wel.html" 331 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET ///////srv/wel.html" 330 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET //////srv/wel.html" 329 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET /////srv/wel.html" 328 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET ////srv/wel.html" 327 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET ///srv/wel.html" 326 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - 2006-10-30 21:51:49 10.0.0.152 - 301 + "GET //srv/wel.html" 325 0 "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1) Gecko/20061010 Firefox/2.0" - |
Dit komt dus doordat de (.*) blijkbaar een hogere prioriteit heeft dan \\+ en //+. Ik verwachtte eigenlijk dat de regexp gewoon van links naar rechts wordt gelezen. Hoe kan ik dit het beste afvangen? Ik heb bijvoorbeeld dit geprobeerd:
code:
Maar dit levert hetzelfde resultaat op 1
2
| RewriteRule ^(.*)(\\*)?\\+(\\*)?(.*)$ $1/$4 [R=301,L] RewriteRule ^(.*)(/*)?//+(/*)?(.*)$ $1/$4 [R=301,L] |
edit:
Nog even ter verduidelijking, dit is wat ik wil:\+ moet / worden.
//+ moet / worden.
En dat allemaal in 1 cycle.