Sorgu dizelerinden geçerken Apache mod_rewrite'ın davranışıyla ilgili garip bir sorunla (bir hata, belki?) Karşılaştık.
Çoğaltmak için, varsayılan Apache yapılandırmasıyla temiz bir Ubuntu (oneiric) yüklemesi kurduk. Mod_rewrite özelliğini etkinleştirdik ve varsayılan site yapılandırmasında aşağıdakileri ekledik:
RewriteEngine on
RewriteRule ^/(.*)$ /r/$1 [R]
Test etmek için curl kullanıyoruz:
curl -I 'http://[ubuntu-machine]/a/b%20c?a%20b'
İlgili çıktı:
HTTP/1.1 302 Found
Server: Apache/2.2.20 (Ubuntu)
Location: http://[ubuntu-machine]/r/a/b%20c?a%2520b
Gördüğünüz gibi, sorgu dizesi çift çıkışlıdır, bu yanlıştır. Bunu nasıl düzeltebileceğimizi bilen var mı? Denediğimiz birkaç şey:
- [NE] ekleniyor. Bu bize doğru sorgu dizesini verir, ancak yolun çıkış yolu yoktur, bu da yeni sorunlara yol açar.
- [NE, B] ekleniyor. Bu işin görünüyor, ama neden
/
arasındakia
veb
yolun parçaları kaçmış edebilirsiniz. Sorgu dizesinin manuel olarak çıkışını kaldırma.
RewriteCond %{QUERY_STRING} .* RewriteMap unescape int:unescape RewriteRule ^(.*)$ $1?${unescape:%{QUERY_STRING}}
Ancak bu , sorgu dizesinde diyelim ki bir
&
ile bir kaçan&
arasında ayrım yapamayacağımız anlamına gelir .
Güncelleme:
Bu hata raporu aynı sorunu açıklamaktadır. İlk yorum, sorunu düzelttiği anlaşılan bir taahhütle bağlantılıdır, ancak Pieter'in aşağıda söylediği gibi, aslında düzeltilmiş gibi görünmemektedir.