Est-il possible de rediriger un utilisateur vers une autre page grâce à l'utilisation de PHP?
Supposons que l'utilisateur accède à www.example.com/page.php
et que je souhaite le rediriger vers www.example.com/index.php
, comment pourrais-je le faire sans utiliser une méta-actualisation? C'est possible?
Cela pourrait même protéger mes pages contre les utilisateurs non autorisés.
protection from unauthorized users
via redirect; ce n'est pas ainsi qu'il faut faire les choses;)Réponses:
Résumé des réponses existantes plus mes propres deux cents:
1. Réponse de base
Vous pouvez utiliser la
header()
fonction pour envoyer un nouvel en-tête HTTP, mais cela doit être envoyé au navigateur avant tout HTML ou texte (donc avant la<!DOCTYPE ...>
déclaration, par exemple).2. Détails importants
mourir () ou sortir ()
Pourquoi devriez-vous utiliser
die()
ouexit()
: Le Daily WTFURL absolue ou relative
Depuis juin 2014, des URL absolues et relatives peuvent être utilisées. Voir RFC 7231, qui avait remplacé l'ancien RFC 2616 , où seules les URL absolues étaient autorisées.
Codes d'état
L'en-tête "Location" de PHP utilise toujours le code direct HTTP 302 , mais ce n'est pas celui que vous devez utiliser. Vous devriez considérer 301 (redirection permanente) ou 303 (autre).
Remarque: le W3C mentionne que l'en-tête 303 est incompatible avec "de nombreux agents utilisateurs antérieurs à HTTP / 1.1. Les navigateurs actuellement utilisés sont tous des agents utilisateurs HTTP / 1.1. Cela n'est pas vrai pour de nombreux autres agents utilisateurs comme les araignées et les robots.
3. Documentation
En-têtes HTTP et la
header()
fonction en PHP4. Alternatives
Vous pouvez utiliser la méthode alternative
http_redirect($url);
dont le package PECL pecl doit être installé.5. Fonctions d'assistance
Cette fonction n'intègre pas le code d'état 303:
C'est plus flexible:
6. Solution
Comme mentionné, les
header()
redirections ne fonctionnent qu'avant que quoi que ce soit ne soit écrit. Ils échouent généralement s'ils sont invoqués en sortie HTML . Ensuite, vous pouvez utiliser une solution de contournement d'en-tête HTML (pas très professionnelle!) Comme:Ou même une redirection JavaScript.
la source
header('Location: '.$newURL);
doit être avant que tout HTML (ou texte) ait été transmis au navigateur, sinon cela ne fonctionnera pas correctement.http-equiv="Location"
n'est pas pris en charge par tous les navigateurs. Vous devriez utiliser à larefresh
place!<meta http-equiv="refresh" content="0;url=http://example.com/">
Utilisez la
header()
fonction pour envoyer un en-Location
tête HTTP :Contrairement à ce que certains pensent, cela
die()
n'a rien à voir avec la redirection. Utilisez-le uniquement si vous souhaitez rediriger au lieu d'une exécution normale.Fichier example.php :
Résultat de trois exécutions:
Reprise - obligatoire
die()
/exit()
est une légende urbaine qui n'a rien à voir avec le PHP réel. Cela n'a rien à voir avec le client "respectant" l'en-Location:
tête. L'envoi d'un en-tête n'arrête pas l'exécution de PHP, quel que soit le client utilisé.la source
exit()
c'est pour empêcher la page d'afficher le contenu restant (pensez aux pages restreintes). vartec a raison, cela n'a rien à voir avec l'en-tête Emplacement HTTP et vous n'en avez pas besoinexit
. J'ai choisi de l'inclure dans ma réponse parce que, pour quelqu'un qui ne sait pas comment faire une simple redirection, on pourrait tout aussi bien jouer en toute sécurité plutôt que de ne pas mettre en œuvre une étape simple mais cruciale juste pour qu'il puisse profiter d' un processus avancé contrôle..htaccess
pour rediriger, mais j'ai besoin d'un moyen de transmettre en quelque sorte quel domaine redirigé vers le domaine final?N'oubliez pas de mourir () / exit ()!
la source
Sortie JavaScript de PHP en utilisant echo, qui fera le travail.
Vous ne pouvez pas vraiment le faire en PHP, sauf si vous mettez en mémoire tampon la sortie de la page, puis vérifiez plus tard la condition de redirection. Cela pourrait être trop compliqué. N'oubliez pas que les en-têtes sont la première chose envoyée depuis la page. La plupart de la redirection est généralement requise plus tard dans la page. Pour cela, vous devez mettre en mémoire tampon toutes les sorties de la page et vérifier la condition de redirection plus tard. À ce stade, vous pouvez rediriger l'en-tête de l'utilisateur de la page () ou simplement faire écho à la sortie mise en mémoire tampon.
Pour en savoir plus sur la mise en mémoire tampon (avantages)
Qu'est-ce que la mise en mémoire tampon de sortie?
la source
Cannot modify header information - headers already sent by
erreur courante .mais si vous utilisez la fonction d'en-tête, vous obtiendrez parfois "un avertissement comme l'en-tête déjà envoyé" pour résoudre ce problème qui ne résonnera pas ou ne s'imprimera pas avant d'envoyer des en-têtes ou vous pouvez simplement utiliser
die()
ouexit()
après la fonction d'en-tête.ici vous ne rencontrerez aucun problème
la source
La plupart de ces réponses oublient une étape très importante!
En laissant cette deuxième ligne vitale, vous pourriez vous retrouver sur The Daily WTF . Le problème est que les navigateurs ne doivent respecter les en- têtes qui votre déclaration de page, donc les en - têtes étant ignorés, le reste de la page sera exécutée sans redirection.
la source
die();
vous avez donnée - si vous ne le faites pas, l'utilisateur peut voir la page complète pendant un moment si vous l'utilisez; l'utilisateur sera redirigé et aucun problème de contenu temporaire ne s'affichera + 1Utilisation:
Ou si vous avez déjà ouvert des balises PHP, utilisez ceci:
Vous pouvez également rediriger vers des pages externes, par exemple:
Assurez-vous d'inclure
exit()
ou d'incluredie()
.la source
Vous pouvez utiliser des variables de session pour contrôler l'accès aux pages et autoriser également les utilisateurs valides:
http://php.net/manual/en/reserved.variables.session.php .
Récemment, j'ai eu des cyberattaques et j'ai décidé que je devais connaître les utilisateurs essayant d'accéder au panneau d'administration ou à une partie réservée de l'application Web.
J'ai donc ajouté un accès au journal pour l'adresse IP et les sessions utilisateur dans un fichier texte, car je ne veux pas déranger ma base de données.
la source
Beaucoup de ces réponses sont correctes, mais elles supposent que vous avez une URL absolue, ce qui n'est peut-être pas le cas. Si vous souhaitez utiliser une URL relative et générer le reste, vous pouvez faire quelque chose comme ça ...
la source
header( 'Location: http://www.yoursite.com/new_page.html' );
la source
.htaccess
pour rediriger, mais j'ai besoin d'un moyen de transmettre en quelque sorte quel domaine redirigé vers le domaine final?Utilisez le code suivant:
la source
J'ai déjà répondu à cette question, mais je vais le faire à nouveau car en attendant, j'ai appris qu'il y a des cas particuliers si vous exécutez en CLI (les redirections ne peuvent pas se produire et ne devraient donc pas se produire
exit()
) ou si votre serveur Web est exécuter PHP en tant que (F) CGI (il a besoin d'un en-Status
tête préalablement défini pour rediriger correctement).J'ai également traité la question de soutenir les différents codes de redirection HTTP (
301
,302
,303
et307
), comme il a été abordé dans les commentaires de ma réponse précédente. Voici les descriptions:la source
Pour rediriger le visiteur vers une autre page (particulièrement utile dans une boucle conditionnelle), utilisez simplement le code suivant:
Dans ce cas,
mypage.php
c'est l'adresse de la page vers laquelle vous souhaitez rediriger les visiteurs. Cette adresse peut être absolue et peut également inclure les paramètres dans ce format:mypage.php?param1=val1&m2=val2)
Chemin relatif / absolu
Lorsqu'il s'agit de chemins relatifs ou absolus, il est idéal de choisir un chemin absolu à la racine du serveur (DOCUMENT_ROOT). Utilisez le format suivant:
Si jamais la page cible se trouve sur un autre serveur, vous incluez l'URL complète:
En-têtes HTTP
Selon le protocole HTTP, les en-têtes HTTP doivent être envoyés à
before
tout type de contenu. Cela signifie qu'aucun caractère ne doit être envoyé avant l'en-tête - pas même un espace vide!Redirection temporaire / permanente
Par défaut, le type de redirection présenté ci-dessus est temporaire. Cela signifie que les moteurs de recherche, tels que la recherche Google, ne prendront pas en compte la redirection lors de l'indexation.
Si vous souhaitez informer les moteurs de recherche qu'une page a été définitivement déplacée vers un autre emplacement, utilisez le code suivant:
Par exemple, cette page contient le code suivant:
Lorsque vous cliquez sur le lien ci-dessus, vous êtes automatiquement redirigé vers cette page. De plus, il s'agit d'une redirection permanente (Statut: 301 Déplacé en permanence). Donc, si vous saisissez la première URL dans Google, vous serez automatiquement redirigé vers le deuxième lien redirigé.
Interprétation du code PHP
Le code PHP situé après l'en-tête () sera interprété par le serveur, même si le visiteur se déplace vers l'adresse spécifiée dans la redirection. Dans la plupart des cas, cela signifie que vous avez besoin d'une méthode pour suivre la
header()
fonction de laexit()
fonction afin de diminuer la charge du serveur:la source
¶
(vers la fin du deuxième paragraphe)? Voulez-vous dire à la¶
place (donc l'ensemble se litmypage.php?param1=val1¶m2=val2)
)? (L'entité HTML para ) est "¶" - peut-être qu'un programme externe a fait une conversion?).Utilisation:
Il s'agit d'une redirection PHP régulière et normale, mais vous pouvez créer une page de redirection avec quelques secondes d'attente par le code ci-dessous:
la source
À la veille du web sémantique, l'exactitude est quelque chose à considérer. Malheureusement, l'en-tête "Location" de PHP utilise toujours le code direct HTTP 302 , qui, strictement, n'est pas le meilleur pour la redirection. Celui qu'il devrait utiliser à la place est le 303 .
Le W3C a la gentillesse de mentionner que l'en-tête 303 est incompatible avec "de nombreux agents utilisateurs pré-HTTP / 1.1", ce qui équivaudrait à aucun navigateur en cours d'utilisation. Ainsi, le 302 est une relique, qui ne devrait pas être utilisée.
... ou vous pouvez simplement l'ignorer, comme tout le monde ...
la source
Vous pouvez utiliser certaines méthodes JavaScript comme ci-dessous
self.location="http://www.example.com/index.php";
window.location.href="http://www.example.com/index.php";
document.location.href = 'http://www.example.com/index.php';
window.location.replace("http://www.example.com/index.php");
la source
Oui, vous pouvez utiliser la fonction header () ,
Et la meilleure pratique consiste également à appeler la fonction exit () juste après la
header()
fonction pour éviter l'exécution de code ci-dessous.Selon la documentation,
header()
doit être appelé avant d'envoyer une sortie réelle.la source
Comme d'autres l'ont dit ici, en envoyant l'en-tête de l'emplacement avec:
mais vous devez le faire avant d'envoyer toute autre sortie au navigateur.
De plus, si vous allez utiliser cela pour bloquer les utilisateurs non authentifiés de certaines pages, comme vous l'avez mentionné, gardez à l'esprit que certains agents utilisateurs l'ignoreront et continueront de toute façon sur la page actuelle, vous devrez donc mourir ( ) après l'avoir envoyé.
la source
but you need to do it before you've sent any other output to the browser.
Impressionnant!! J'ai cherché pendant des minutes pourquoi j'avais continué à recevoir les en-têtes qui avaient déjà envoyé une erreur. +1 !!die()
est juste une façon de le faire.Voici mes pensées:
À mon humble avis, la meilleure façon de rediriger une demande entrante serait d'utiliser des en-têtes de localisation, ce qui va
Une fois cette instruction exécutée et la sortie envoyée, le navigateur commencera à rediriger l'utilisateur. Cependant, assurez-vous qu'il n'y a pas eu de sortie (aucun echo / var_dump) avant d'envoyer des en-têtes, sinon cela entraînera des erreurs.
Bien que ce soit un moyen rapide et sale de réaliser ce qui était initialement demandé, cela se révélera finalement être un désastre SEO, car ce type de redirection est toujours interprété comme une redirection 301/302, donc les moteurs de recherche verront toujours votre page d'index en tant que page redirigée, et non quelque chose d'une page de destination / page principale.
Par conséquent, cela affectera les paramètres SEO du site Web.
la source
La meilleure façon de rediriger avec PHP est le code suivant ...
Assurez-vous qu'aucun code ne fonctionnera après
Tout le code doit être exécuté avant la ligne ci-dessus.
Supposer,
Cas 1:
Il redirigera correctement vers l'emplacement (index.php).
Cas 2:
Le code ci-dessus ne redirigera pas vers l'emplacement (index.php).
la source
Oui, il est possible d'utiliser PHP. Nous allons rediriger vers une autre page.
Essayez le code suivant:
la source
1. Utilisation d'
header
une fonction PHP intégréea) Redirection simple sans paramètres
b) Rediriger avec les paramètres GET
2. Rediriger avec JavaScript en PHP
a) Redirection simple sans paramètres
b) Rediriger avec les paramètres GET
la source
Nous pouvons le faire de deux manières:
Lorsque l'utilisateur vient sur https://bskud.com/PINCODE/BIHAR/index.php puis redirige vers https://bskud.com/PINCODE/BIHAR.php
Par le code PHP ci-dessous
Enregistrez le code ci-dessus dans https://bskud.com/PINCODE/BIHAR/index.php
Lorsqu'une condition est vraie, redirigez-la vers une autre page:
la source
header()
fonction PHP .Utilisation:
la source
Il existe plusieurs façons de le faire, mais si vous préférez
php
, je vous recommande d'utiliser laheader()
fonction.Fondamentalement
Si vous voulez le faire monter d'un cran, il est préférable de l'utiliser dans les fonctions. De cette façon, vous pouvez y ajouter des authentifications et d'autres contrôles.
Essayons avec en vérifiant le niveau de l'utilisateur.
Supposons donc que vous ayez stocké le niveau d'autorisation de l'utilisateur dans une session appelée
u_auth
.dans le
function.php
Vous appellerez ensuite la fonction pour chaque page que vous souhaitez authentifier.
Comme dans
page.php
ou sur toute autre page.Références;
la source
J'aime le genre de redirection au fil du temps.
la source
Utilisation de la fonction d'en-tête pour le routage
Supposons que nous voulons router du fichier A.php vers B.php que nous devons utiliser l'aide de
<button>
ou<a>
. Voyons un exempleB.php
la source
Si vous utilisez Apache, vous pouvez également utiliser .htaccess pour la redirection.
la source
Vous pouvez essayer d'utiliser la
header
fonction PHP pour effectuer la redirection. Vous souhaiterez définir le tampon de sortie afin que votre navigateur ne lance pas un avertissement de redirection à l'écran.la source
essaye celui-là
la source