2011-06-29 4 views
45

Mamy kilka bardzo podstawowych reguł mod_rewrite:mod_rewrite urlencoding już parametr kwerendy słupowo-zapytanej - jakikolwiek sposób wyłączyć to?

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L] 

mod_rewrite wydaje się wykonywać swoje zadania, a jeśli użytkownik ma dostęp:

something.swf?param=value, jest przekierowywany poprawnie http://www.newdomain.com/something.swf?param=value

problem jest w tej sytuacji:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

co się dzieje dzieje się mod_rewrite trwa to na to samo ponowne urlencode param ciąg kwerendy

więc co użytkownik kończy się to:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

przekierowany do

www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE 

więc skończyć z podwójnie urlencoded wartość. boourns!

Chociaż rozumiem, że możemy wprowadzić regułę \?(.*) ... ?$1 dla tego, myślę, że musi istnieć sposób, aby powiedzieć mod_rewrite NIE urlenić parametry ciągu zapytania ... chcielibyśmy uniknąć stosowania 2 reguł ponieważ ważne ścieżki są:

something.swf (no query string) 

i

something.swf?someparams... 

tak tak, najlepiej ... tylko powiedzieć mod_rewrite: proszę, nie urlencoding z params ciąg kwerendy ... tylko bezpośredni pośredni do nowego adresu URL za pośrednictwem R=302.

+2

doh! odpowiedź brzmi: parametr NE. Przepraszam! –

+2

Założę się, że tak. Czy możesz udzielić odpowiedzi i oznaczyć ją jako zaakceptowaną? (Sądzę, że jest na to czas, ale rób to tak szybko, jak możesz: P) –

+0

Tak, muszę powiedzieć, że potrzebuję 100 powtórzeń, aby odpowiedzieć na moje własne pytanie w mniej niż 8 godzin. odpowie później. –

Odpowiedz

89

sposobem na osiągnięcie tego jest użycie parametru NE (brak ucieczki).

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L] 

powinny faktycznie czytać

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,NE,L] 

to zmusi mod_rewrite pozostawić wszystkie wartości ciągów zapytań, ponieważ są one, bez jakiegokolwiek kodowania/ucieczkę.

tak proste jak to :)

+0

Naprawiono również mój problem, dziękuję! – Teekin

+0

Może to być błąd związany z tym. NE to dobra opcja, dopóki nie masz zakodowanych adresów URL znaków w segmencie ścieżki adresu URL. Zobacz: http://serverfault.com/questions/331899/apache-mod-rewrite-double-encodes-query-string-on-redirect – Ryan

Powiązane problemy