8722 sujets

Développement web côté serveur, CMS

Bonjour à tous les développeurs !

Je m'interroge sur le fonctionnement de WAMP SERVER, car quand j'utilise %{HTTP_REFERER} j'ai observé 2 comportements distincts :

1- Quand je navigue dans mon site en test, HTTP_REFERER est bien renseigné et correspond effectivement à la page appelante. Ainsi sur une page "n" appelée on connait toujours la page "n-1" appelante.
2- En revanche, quand on rentre dans le site, par la barre d'adresse ou par un favori (c'est à dire par une entrée que je qualifie de "brutale", HTTP_REFERER n'existe pas
Dans ce 2ème cas, la variable globale semble volontairement écartée pour des raisons de confidentialité, ce qui ne me dérange pas outre mesure, néanmoins je voudrais savoir : Si elle n'existe pas vraiment à ce moment précis, ou si elle existe mais vide ('').

J'ai fait plusieurs tests dans htaccess, qui n'ont pas été concluants. En d'autre termes je voudrais faire l'équivalent de "isset" de cette variable, or cela n'est pas prévu dans le manuel.
J'ai bien vu sur les forums, bon nombre d'exemples où cette variable est testée dans tous les sens. Et je me demande si ce comportement est spécifique à WAMP, ou si les sites "en production" réagissent autrement.

Cdlt.

P.S : Ma question n'est pas urgente, j'arrive de toute façon à régler mon problème via PHP, néanmoins je trouvais que cela aurait été plus élégant et surtout immédiat par htaccess.
Bonjour.

Peut-être avec un peu de code ?...
    Options +FollowSymlinks
    RewriteEngine on
#----------------------------------------
#  Entrée par un lien externe au site ?
#----------------------------------------
    RewriteCond %{HTTP_REFERER} !^http://---host---/---domain---/.*$
    RewriteRule ^([a-z]+)\.php index.php?theme=$1 [L]
#----------------------------------------
#  Entrée fantaisiste à partir de la barre d'adresse...
#----------------------------------------
    ErrorDocument 404 /---domain---/index.php?theme=accueil [L] 
Si j'ai un "referer" ad_hoc, aucun problème (navigation sereine, pas de vague).

En revanche si le "referer" n'existe pas, que fait l'indien ?
- il considère qu'il ne peut pas faire ce test et donc ne fait rien...
- il considère que la condition est vérifiée (un ensemble vide étant différent d'une chaine réelle) et réécrit...

Mes tests me laissent plutôt penser qu'APACHE fait autre chose (ce que ses concepteurs ont pensé, mais que je n'arrive pas à comprendre)...

j'ai testé aussi : RewriteCond %{HTTP_REFERER} !-s
et même en PERL : RewriteCond ! defined(%{HTTP_REFERER})

mais cela ne fonctionne pas, htaccess n'exécute pas la règle de réécriture...
Salut, j'ai fait le test avec ce code par exemple:


RewriteEngine On
Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} ^$
RewriteRule ^(.*)$     http://www.google.fr    [R,NC]


ici, si on n'a pas de referer on redirige vers google, et ça fonctionne très bien.
Tu peux consulter au pire la doc apache pour plus de détails.
Cepedant es-tu certain que le mod_rewrite est bien activé? En bas à droite de ta barre des tâches: Wamp > Apache > Apache modules > rewrite_module
Bonsoir et merci de votre attention..

Mais ce n'est pas ce que je veux faire. Il faut rester dans le site et non pas faire une redirection vers un site extérieur.
N'avez vous pas remarqué que j'utilise une référence arrière $1...

J'ai quand même retesté à tout hasard ce flag [R] que j'avais déjà essayé auparavant :
RewriteCond %{HTTP_REFERER} ^$
RewriteRule ^([a-z]+)\.php$  http://localhost/monsite/index.php?theme=$1  [R, NC]
Je ne rentre même plus dans le site, j'ai immédiatement une 500 Internale Server Error !

Et dans apache-error Log : [Tue Dec 17 02:02:19 2013] [client 127.0.0.1] C:/wamp/www/monsite/.htaccess: RewriteRule: bad flag delimiters, referer: http://localhost/

D'ailleurs Apache donne bien le REFERER correct (http://localhost/) puisque je suis effectivement rentré par la page d'accueil de WAMP

Marche pas !
Bonjour,

j'ai poursuivi quelques tests avec cette nouvelle condition :
RewriteCond %{HTTP_REFERER} =''
RewriteRule ^([a-z]+)$\.php index.php?theme=$1 [L]

Et aussi avec des doubles quotes :
RewriteCond %{HTTP_REFERER} =""

.htaccess semble mieux analyser la condition, en revanche j'ai des comportements différents suivant que j'utilise l'une ou l'autre des écritures, que je suis sous IE ou FFOX, mais aussi que j'utilise un Favori ou la Barre d'adresse.

Je me retrouve donc avec une multiplicité de cas de figure, qu'il est impossible d'analyser en aveugle, et de toute façon je n'ai pas le résultat souhaité.
J'y perds un peu mon latin, je pense que je vais en rester avec mes tests dans mes routines PHP, c'est certes moins élégant mais c'est plus sûr...
Cordialement. (je laisse le sujet "Non résolu" pour l'instant)
Ce que j'ai fait était un exemple afin de montrer que %{HTTP_REFERER} fonctionnait bien. Maintenant afin de montrer ce qui fonctionne vraiment, voilà le test que j'ai fait:

	RewriteCond %{HTTP_REFERER} ^$
	RewriteRule ^([a-z]+)\.php$  http://localhost/phpmyadmin?theme=$1  [R,NC]


J'ai redirigé ça vers phpmyadmin (n'ayant pas ton application), j'obtiens bien le résultat escompté. C'est à dire une redirection vers l'autre URL en lui envoyant le paramètre en question. Le soucis, je pense, vient d'autre(s) règle(s) dans ton .htaccess et/ou virtualhost (si tu as aussi mis des règles ici)?. Commentes tout et ne met que ces règles afin de "débugguer" pas à pas.

Par ailleurs l'erreur bad flag delimiters provient de "mauvais espace" dans ton fichier, réécris la règle à la main (sans copier/coller) et tu ne l'auras plus.
Bonjour, et merci de votre patience.
 RewriteCond %{HTTP_REFERER} ^$
 RewriteRule ^([a-z]+)\.php$   http://localhost/monsite?theme=$1  [R]
Incroyable, ça fonctionne !...
---Voilà ce que je comprends : L'indien redirige dans le même répertoire, utilisant par défaut index.php, il lui transmet néanmoins la query string. Jamais je n'aurais trouvé, tant l'écriture me parait improbable !
---Un petit bémol toutefois : une URL "peu sexy" dans la barre d'adresse, sauf sous OPERA.

Encore merci.