Puncte:0

Condiția Apache IF bazată pe antetul HTTP personalizat

drapel cn

Am o directivă RewriteRule în Apache pe care aș dori să o aplice numai dacă este prezent un antet HTTP personalizat.

Ce am incercat:

<If "%{HTTP:X-MyCustomHeader} in { 'present' }">
RewriteRule ^/$ /present.html [NC,R=301,L]
</If>
<Else>
RewriteRule ^/$ /absent.html [NC,R=301,L]
</Else>

Acest lucru nu funcționează deloc, nici RewriteRule nu este aplicat.

Alternativa pe care am incercat-o:

<If "-n req_novary('X-MyCustomHeader')">

Nici nu merge.

Testez cu curl like

curl -este http://example.com/ -H X-MyCustomHeader:prezent

Pentru a valida faptul că antetul este prezent și văzut, am încercat să folosesc o variabilă env:

SetEnvIf X-MyCustomHeader ^(prezent)$ MY_CUSTOM_VAR=$1
Antetul setat întotdeauna X-MyCustomHeader „### FOUND ###” env=MY_CUSTOM_VAR

Acest lucru funcționează conform așteptărilor și primesc FOUND în răspuns.

Dar, din nou, când încerc să folosesc variabila env în instrucțiunea IF, aceasta nu va fi declanșată, de ex.

<If "-n env('MY_CUSTOM_VAR')">

Cum pot face asta cu IF? Și da, știu că există o condiție RewriteCond pentru a verifica variabilele de mediu, dar trebuie să folosesc și alte directive, așa că aș dori să le schimb într-un bloc IF.

Conform documentelor: https://httpd.apache.org/docs/trunk/en/expr.html#functions

Când variabilele de mediu sunt căutate într-o condiție, este important să luați în considerare cât de devreme apare această rezoluție în procesarea cererii. Ca un ghid, orice directivă definită în afara contextului gazdei virtuale (director, locație, htaccess) nu este probabil să fi avut încă șansa de a fi executată. SetEnvIf în domeniul gazdă virtuală este o directivă care rulează înainte de această rezoluție.

Deci, conform documentelor, variabilele SetEnvIf ar trebui să funcționeze, dar nu?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.