J'exécute apache et j'essaie de définir un en-tête Foo = bar uniquement lorsque la requête a une variable "q" sur la chaîne de requête. Je voudrais quelque chose comme ça dans mon htaccess:

<RequestUri "q=">
    Header set Foor "bar"
</RequestUri>

Bien sûr, cela ne fonctionne pas. J'ai déjà essayé d'utiliser "Location" et "LocationMatch" mais ceux-ci ne sont pas autorisés dans htaccess. Alors, comment puis-je faire ça?

3
Samul 28 déc. 2015 à 05:19

2 réponses

Meilleure réponse

Si vous utilisez Apache 2.4, vous pouvez faire quelque chose comme ça

<If "%{QUERY_STRING} =~ /q=.*?/">
    Header set Foo "bar"
</If>

https://httpd.apache.org/docs/2.4/mod/core.html#if

https://httpd.apache.org/docs/2.4/expr.html#examples

5
Panama Jack 28 déc. 2015 à 05:57

Juste pour développer davantage si vous souhaitez définir la valeur de l'en-tête de manière dynamique en fonction de la valeur de la chaîne de requête, vous pouvez capturer des groupes d'expression régulière.

Par exemple, si vous avez une variable "_locale" dans votre URL et que vous souhaitez capturer sa valeur pour un en-tête, vous pouvez utiliser:

 <If %{QUERY_STRING} !~ m#_locale=([a-z]{2})#">
     RequestHeader set locale "$1"
</If>

(En supposant que la valeur sera de deux lettres minuscules.)

Cela pourrait correspondre à "_locale = en" dans la chaîne de requête, puis copier "en" dans l'en-tête "locale".

1
Adambean 21 août 2020 à 12:31