2010-09-02 8 views
14

Je construis un peu de cache sur un de mes sites, et je n'arrive pas à trouver s'il y a moyen d'ajouter une condition avec mod_rewrite pour appliquer seulement si la chaîne de requête sur une requête est vide.Réécriture pour une chaîne de requête vide

Par exemple, j'aimerais savoir si je peux avoir une demande sans chaîne de requête comme

http://www.example.com/ 

charge la page à

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

Mais toute demande avec une chaîne de requête, tels que

http://www.example.com/?id=32 

pour charger normalement et ne pas être affecté par la réécriture.

Qu'est-ce qui me manque?

Répondre

32

Je l'ai compris. Cela semble faire l'affaire assez bien:

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

Bien sûr, s'il y a une meilleure façon, j'aimerais entendre.

+0

super merci! m'a vraiment aidé à résoudre un problème de production. – URB

3

Je sais que ce ceux assez vieux, mais meilleure alternative est la suivante:

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

Pourquoi est-ce mieux? –

0

Pour match contre QueryString vide, nous utilisons ^ $ dans notre modèle de condition. La règle suivante réoriente /file.html à /file2.html mais il ne parvient pas à rediriger /file.html?querystring en raison de la condition.

RewriteEngine on 

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

Une question marque vide à la fin de la règle est importante car elle supprime l'ancien querystring sinon l'URL redirigée ressemblera /file2.html?querystring.