2013-03-07 19 views
9

Próbuję wykonać przekierowanie 301 za pomocą .htaccess.Użyj RewriteCond% {QUERY_STRING} bez dołączania ciągu zapytania do nowego adresu

Emisja:

/?view=products&id=12345 -> /8831 

nie ma związku pomiędzy starym i nowym adresem.

Z jakiegoś powodu

Redirect 301 /?view=products&id=12345 /8831 

nie działa. Jeśli usuniemy znak zapytania, działa on bez znaku zapytania.

Próbowałem też:

RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831 [L,R=301] 

ale przekierowuje mnie do /8831?view=products&id=12345, co nie jest dobre dla mnie. Nie muszę ciąg kwerendy w nowej URL miejsca

Odpowiedz

18
RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831? [L,R=301] 

Końcówka ? uniemożliwi oryginalne parametry zapytania przed dołączony, chyba że także dać flagę [QSA] ponownie.

Od the manual:

Uwaga: Query String wzór nie będzie porównywana z łańcucha zapytania. Zamiast tego musisz użyć RewriteCond ze zmienną% {QUERY_STRING}. Można jednak utworzyć adresy URL w łańcuchu podstawiania, zawierającym część ciągu zapytania. Po prostu użyj znaku zapytania wewnątrz łańcucha zastępczego, aby wskazać, że poniższy tekst powinien zostać ponownie wprowadzony do ciągu zapytania. Gdy chcesz usunąć istniejący ciąg zapytania, zakończ łańcuch podstawiania za pomocą tylko znaku zapytania. Aby połączyć nowy ciąg zapytania ze starym, użyj flagi [QSA].

Powiązane problemy