2010-03-23 5 views
3

J'utilise PHP pour rediriger une page retour à la page précédente ce qui suit:PHP Redirect problème avec le sous-domaine

header("Location: {$_SERVER['HTTP_REFERER']}"); 

Cet ensemble de pages ne seront utilisées que par les utilisateurs internes, donc je ne suis pas terriblement préoccupé par le fait que le référant ne sera pas toujours disponible.

Le problème auquel je suis confronté est que si le referer ressemble à http://subdomain.domain.com/test.php?id=13, la redirection se termine par http://subdomain.domain.com/.domain.com/test.php?id=13. Notez le .domain.com/ supplémentaire dans l'URL.

J'ai testé en codant en dur la valeur, et cela provoque également le problème. phpMyAdmin semble souffrir du même problème, mais seulement sur ce serveur particulier.

Si ce n'est pas une question SO, veuillez vous déplacer en conséquence.

EDIT: par @yaggo

test.php ne contient que header("Location: http://subdomain.domain.com/test2.php");

curl --head --referer 'http://subdomain.domain.com/' 'http://subdomain.domain.com/test.php' 

HTTP/1.1 302 Found 
Server: nginx/0.7.64 
Date: Fri, 02 Apr 2010 17:21:45 GMT 
Content-Type: text/html; charset=UTF-8 
Connection: keep-alive 
X-Powered-By: PHP/5.2.12-pl0-gentoo 
Location: .domain.com/test2.php 
+0

'HTTP_REFERER' est envoyé par le navigateur. Quel navigateur utilisez-vous? –

+0

Chrome. Mais j'ai déjà vérifié que la valeur HTTP_REFERER est correcte et complète. –

+1

pourquoi avez-vous des accolades autour du $ _SERVER ['HTTP_REFERER']? – Nexum

Répondre

1

Il semble que votre configuration nginx cause les problèmes.

Il est tout à fait possible que nginx modifie les en-têtes de réponse. Ce n'est pas par défaut - vous pourriez avoir une configuration qui lui est destinée à se comporter comme un proxy inverse, etc.

Avez-vous essayé de tester la redirection sur un nginx avec sa configuration par défaut?

-2

header("Location: ".$_SERVER['HTTP_REFERER']);

Modifié:

Vérifiez que vous .htaccess paramètres ou si aucune solution trouvé vous pouvez utiliser preg_re placer pour supprimer ce dernier ".domain.com"

mais il semble que ce n'est pas une erreur PHP.

OU utilisez javascript pour obtenir l'adresse de référence ... puis utilisez window.location.href = url; pour rediriger ...

+0

Cela fait exactement la même chose. Comment cela réglerait-il le problème? – GSto

+0

en fait il avait des accolades là donc je Il est préférable de rester fidèle à la solution normale, mais -1 est trop dur car ce n'était pas une réponse incorrecte. – Val

1

[...] la redirection aboutit à http://subdomain.domain.com/.domain.com/test.php?id=13.

Pouvez-vous isoler le problème un peu plus? Cette URL est-elle exactement ce qui est retourné par PHP ou est-ce le navigateur (Chrome?) Qui le voit?

Pouvez-vous vérifier les en-têtes réels, par ex. avec boucle:

$ curl --head --referer 'http://your-referer' 'http://your-page/' 
2

J'ai recréé à la fois vos programmes sur mon serveur une fois avec

header("Location: http://subdomain.domain.com/some/place"); 

et une fois avec

header("Location: {$_SERVER['HTTP_REFERER']}"); 

et les deux donnent le résultat Corret

curl --head --referer 'http://subdomain.domain.com/some/place' 'http://subdomain.domain.com/test.php' 

HTTP/1.1 302 Found 
Date: Fri, 02 Apr 2010 17:48:54 GMT 
Server: Apache/2.0.52 (Red Hat) 
X-Powered-By: PHP/5.1.2 
Location: http://subdomain.domain.com/some/place 
Connection: close 
Content-Type: text/html 

Je suis un usi Une version différente de PHP et un serveur web différent, donc il y a deux choses à étudier.