2012-10-13 17 views
25

Chcę mod_rewrite URL do innej strony, ale potem również chcę, aby wszelkie ciągi kwerend dodane zostały zachowane.Jak mogę mod_rewrite i zachować ciągi zapytania?

RewriteEngine On 

#enforce trailing slashes 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !# 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://localhost/siteroot/$1/ [L,R=301] 

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 

Więc jeśli użytkownik odwiedza apps/app1/, index.php?app=app1 pokazano. Jednak chcę zachować opcjonalne łańcuchy zapytań, aby odwiedzający apps/app1/?variable=x wrócił index.php?app=app1&variable=x.

Jaka zasada/warunek mod_rewrite spowodowałby to?

Odpowiedz

49

Trzeba dodać [QSA] flag („string zapytanie append”)

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 [L,QSA] 

Na stronie 301 przekierowania z flagą [R] w przeciwieństwie do wewnętrznych przepisuje jak ten, łańcuch zapytania jest automatycznie dodawana. Musisz jednak wymusić to na numerze [QSA] dla wewnętrznego przepisywania.

+0

Dzięki, nie zdawałem sobie sprawy, że to było takie proste. –

+1

+1 Zgadzam się z @DanielOakey .. Próbowałem zhackować coś z regexem i nie działało .. –

+2

Aby wyjaśnić, nie chodzi o przepisywanie w stosunku do przekierowań. http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa mówi: Gdy zastępczy identyfikator URI zawiera ciąg zapytania, domyślne zachowanie RewriteRule polega na odrzuceniu istniejącego ciągu zapytania i zastąpieniu go z nowo wygenerowanym. Używanie flagi [QSA] powoduje łączenie ciągów zapytań. –

Powiązane problemy