J'essaye de restreindre l'accès à une page Web avec mod_rewrite, basé sur le referer. L'URL de la page Web est http://www.example.com/path/to/page.php Il est situé sur un serveur Debian dans /var/www/path/to/page.php
J'ai une carte de réécriture allowedReferers
contenant une liste d'URLrediriger basé sur referer en utilisant mod_rewrite en ignorant les paramètres GET
allowedReferers
J'ai également les conditions suivantes rewrite/règles
Rewrite
Cond %{HTTP_REFERER} ^(.*)$
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule /* http://www.someotherplace.com [R,L]
Jusqu'à présent, cela fonctionne parfaitement bien.
peut accéder au site, tandis que
redirigées sur l'someotherplace.co m.
Mon problème est que, dans la vraie vie, mes références contiendront des paramètres GET. par exemple.
Mon idée était de réécrire la première condition à quelque chose comme ça
RewriteCond %{HTTP_REFERER} ^(.*)\?.*$
ou cette
RewriteCond %{HTTP_REFERER} ^(.*)\?id=[0-9]*$
Je l'ai testé à la fois dans Firefox regexes » RegexTester et ils se comportent comme je le veux. appliquée à l'entrée suivante
ils reviennent cela pour $1
:
Je m'y attendais %1
contient aussi l'URL moins les paramètres GET . Alors que, en laissant le reste de la règle inchangée:
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule /* http://www.someotherplace.com [R,L]
devrait entraîner le comportement attendu:
peuvent accéder au site Web, alors que
(ou http://www.athirdplace.com/ etc.)
seront redirigés vers someotherplace.com
Malheureusement, il ne se comporte pas comme prévu du tout. Après avoir appliqué la modification à la première condition, tout référant a accès au site Web.
Comme je voulais voir ce qui est réellement à l'intérieur de %1
, je suis venu avec l'idée suivante:
RewriteCond %{HTTP_REFERER} ^(.*)\?id=[0-9]*$
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule /* %1 [R,L]
En supposant que se référant à la page de
me redirigerait à
hypothèse erronée. Il me redirige vers
qui est, comme je l'ai mentionné au début, l'adresse de la page dont l'accès doit être limité. Et bien sûr provoque un 404, car /var/www/
est docroot.
Rediriger vers %1
était juste une tentative désespérée pour déboguer mon problème, donc je n'ai pas besoin d'une solution pour y parvenir. Ce que je cherche est un moyen de résoudre mon problème de redirection d'origine. Référants comme ces
(quel que soit l'identifiant est passé)
aller à
alors que tout le reste va à
Enfin, je voudrais également apprécier des idées comment déboguer mod_rewrite
, en particulier les moyens de jeter un regard dans des trucs comme %{HTTP_REFERER}
, %1
, $1
, et aime.