Je mets en place une mise en cache sur l’un de mes sites et je n’arrive pas à trouver s’il existe un moyen d’append une condition avec mod_rewrite à appliquer uniquement si la chaîne de requête d’une requête est vide.
Par exemple, j’aimerais savoir si je peux avoir une demande sans chaîne de requête comme
http://www.example.com/
charger la page à
http://www.example.com/index.home.html
Mais toute demande avec une chaîne de requête, telle que
http://www.example.com/?id=32
pour charger normalement et ne pas être affecté par la réécriture.
Qu’est-ce que je rate?
Je l’ai compris. Cela semble bien faire l’affaire:
RewriteCond %{QUERY_STRING} ^$ RewriteRule ^/$ /index.home.html
Bien sûr, s’il y a une meilleure façon, j’adorerais l’entendre.
Je connais ceux-là assez vieux, mais une meilleure alternative est:
RewriteCond %{QUERY_STRING} -n RewriteRule ^/$ /index.home.html
Pour correspondre à QuerySsortingng vide, nous utilisons ^ $ dans notre modèle de condition. La règle suivante redirige /file.html vers /file2.html mais ne parvient pas à redirect /file.html?queryssortingng en raison de la condition.
RewriteEngine on RewriteCond %{QUERY_STRING} ^$ RewriteRule ^/?file.html$ /file2.html? [L,R]
Un point d’interrogation vide à la fin de la règle est important car il supprime l’ancienne chaîne de requête, sinon l’URL redirigé ressemblera à /file2.html?queryssortingng .
Ou alternativement: RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ RewriteRule ^/?file.html$ /file2.html [L,R,QSD]
L’indicateur QSD ne conserve pas la chaîne de requête s’il en existe une.