2010-09-02 15 views
14

Buduję w pamięci podręcznej do jednej z moich stron i nie mogę znaleźć, czy istnieje sposób na dodanie warunku z mod_rewrite do zastosowania tylko wtedy, gdy ciąg zapytania na żądanie jest pusty.Przepisz za pusty ciąg zapytania

Na przykład, chciałbym wiedzieć, czy mogę mieć prośbę bez łańcucha zapytania jak

http://www.example.com/ 

załadować stronę na

http://www.example.com/index.home.html 

Ale każdy żądanie z ciąg kwerendy taki jak

ładowanie normalnie i nie powinno być zmienione przez przepisanie.

Czego mi brakuje?

Odpowiedz

32

Wymyśliłem to. Wydaje się to zrobić trick całkiem dobrze:

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^/$ /index.home.html 

Oczywiście, jeśli istnieje lepszy sposób, chciałabym to usłyszeć.

+0

niesamowite dzięki! Naprawdę pomógł mi w rozwiązaniu problemu produkcyjnego. – URB

3

wiem to te, dość stary, ale lepszym rozwiązaniem jest:

RewriteCond %{QUERY_STRING} -n 
RewriteRule ^/$ /index.home.html 
+1

Dlaczego jest lepiej? –

0

Aby dopasować przeciwko pustym QueryString, używamy ^$ w naszej kondycji Pattern. Poniższa reguła przekierowuje /file.html do /file2.html, ale nie może przekierować /file.html?querystring z powodu warunku.

RewriteEngine on 

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^/?file.html$ /file2.html? [L,R] 

pusty znak zapytania na końcu zasada jest ważna, gdyż odrzuca stare querystring inaczej przekierowanie url będzie wyglądać /file2.html?querystring.