Comment puis-je faire une redirection en PHP?
Est-il possible de rediriger un utilisateur vers une autre page par le biais de l'utilisation de PHP?
Dire que l'utilisateur passe à www.example.com/page.php
et je tiens à les rediriger vers www.example.com/index.php
, comment pourrais-je le faire sans l'utilisation d'un meta refresh? Est-il possible?
Cela pourrait même protéger mes pages des utilisateurs non autorisés.
- Vous pouvez mettre à jour l'en-tête en PHP: header
- tout comme le côté noeud, ne pas de mettre en œuvre tout type de
protection from unauthorized users
via redirection; ce n'est pas la façon dont les choses devraient être faites 😉 - Quel est le problème avec la protection de pages avec redirection ? Alors quelle est la meilleure façon ?
- redirection est l'un des éléments, mais pas le seul. Juste être sûr que les éléments protégés n'ya pas de sortie du tout pour les utilisateurs non autorisés; Navigateur de redirection peut être désactivé à côté client, par exemple: si le navigateur ne marche pas faire la redirection et la page originale obtenir délivrée comme normale, ce qui permettrait à l'utilisateur de voir? CMS généralement de faire la redirection et ne pas imprimer des articles protégés, en remplacement de la sortie normal avec un message de courtoisie.
- vérifier le lien de markus réponse: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Vous devez vous connecter pour publier un commentaire.
Résumé des questions /réponses en plus de ma propre deux cents:
1. Réponses de base
Vous pouvez utiliser le
header()
de fonction pour envoyer une nouvelle en-tête HTTP, mais cela doit être envoyé au navigateur avant tout code HTML ou texte (donc avant de la<!DOCTYPE ...>
déclaration, par exemple).2. Détails importants
die() ou exit()
Pourquoi devriez-vous utiliser
die()
ouexit()
: Le Daily WTFURL absolue ou relative
Depuis le mois de juin 2014 à la fois relative et absolue de l'Url peut être utilisée. Voir RFC 7231 qui avait remplacé l'ancien La RFC 2616, où seules les Url absolues ont été autorisés.
Codes D'État
PHP "Emplacement"de l'en-tête utilise toujours le HTTP 302-code de redirection, mais ce n'est pas celui que vous devez utiliser. Vous devriez Trois cent un (redirection permanente) ou Trois cent trois (autres).
Remarque: W3C mentionne que le 303-d'en-tête est incompatible avec "beaucoup de pré-HTTP/1.1, les agents utilisateurs. Actuellement utilisé des navigateurs sont tous HTTP/1.1, les agents utilisateurs. Ce n'est pas vrai pour beaucoup d'autres agents utilisateurs comme les araignées et les robots.
3. Documentation
En-Têtes HTTP et les
header()
fonction en PHP4. Alternatives
Vous pouvez utiliser la méthode alternative de
http_redirect($url);
qui a besoin de la PECL paquet pecl à être installé.5. Des Fonctions D'Assistance
Cette fonction n'intègre pas la 303 code d'état:
C'est plus souple:
6. Solution de contournement
Comme mentionné
header()
redirige seulement le travail avant tout est écrit. Ils échouent en général si invoquée inmidst HTML de sortie. Ensuite, vous pouvez utiliser un en-tête HTML d'une solution (pas très professionnel!) comme:Ou une redirection JavaScript même.
header('Location: '.$newURL);
doit être avant tout code HTML (ou le texte) a été adoptée dans le navigateur, ou il ne fonctionnera pas correctement.http-equiv="Location"
n'est pas supporté par tous les navigateurs. Vous devez utiliserrefresh
à la place!<meta http-equiv="refresh" content="0;url=http://example.com/">
http_redirect
pour une raison quelconque, alors parier surhttp_redirect
peut-être une erreur dans le long terme.die( "echo here" )
commande echo des méta refresh tag & tous de la validité de la js solutions, devrait me faire un joli compatible peu redirecteur!header()
appel et des petits clous qui sur avant de vidage de la mémoire tampon pour le client.die()
ouexit()
est probablement la dernière chose que vous devriez faire. De vérifier la façon dont vous devriez sortir proprement du cadre de sorte qu'il a une chance de journal de choses, nettoyer, à proximité des fichiers etc. Bien sûr, un cadre sans doute déjà d'une aide de la fonction ou de la méthode est de faire une redirection, mais je suis de mentionner ce que c'est bon de ne pas prendre l'habitude de le faire juste uneexit()
sans réflexion sur les conséquences de l'application.Utiliser le
header()
function pour envoyer un HTTPLocalisation
de l'en-tête:Contrairement à ce que certains pensent,
die()
n'a rien à voir avec la redirection. Utiliser seulement si vous souhaitez rediriger au lieu de l'exécution normale.Fichier example.php:
À la suite de trois exécutions:
Reprise obligatoire
die()
/exit()
est quelque légende urbaine qui n'a rien à voir avec PHP. Il n'a rien à voir avec le client "respecter" laLocation:
en-tête. L'envoi d'un en-tête n'arrête pas de PHP exécution, quel que soit le client.exit()
est de prévenir la page de révéler le contenu d'autres (pensez à des pages à accès restreint). vartec est droit, c' n'a rien à voir avec l'Emplacement HTTP en-tête et vous n'avez pas besoin deexit
. J'ai choisi de l'inclure dans ma réponse, parce que, pour quelqu'un qui ne sait pas comment faire un simple redirection, on pourrait aussi bien jouer la sécurité plutôt que de ne pas mettre en œuvre une étape cruciale tellement il est capable de prendre avantage de avancé de contrôle des processus.N'oubliez pas de mourir()/exit()!
Sortie du JavaScript à partir de PHP à l'aide de l'écho, qui va faire le travail.
Vous ne pouvez pas vraiment faire ça en PHP, à moins que vous le tampon de sortie de page, puis plus tard pour rediriger condition. Qui pourrait être de trop de tracas. Rappelez-vous que les en-têtes sont la première chose qui est envoyé à partir de la page. La plupart de la redirection est généralement nécessaire plus tard dans la page. Pour cela, vous devez tampon de la sortie de la page et cochez pour rediriger état plus tard. À ce stade, vous pouvez soit rediriger l'utilisateur sur la page de l'en-tête (ou simplement de l'écho de la mémoire tampon de sortie.
Pour en savoir plus sur mise en mémoire tampon (avantages)
Qu'est-ce que le tampon de sortie?
Cannot modify header information - headers already sent by
erreur.mais si vous utiliser l'en-tête de la fonction, puis, à certains moments, vous aurez "avertissement
comme en-tête de déjà envoyer" à résoudre qui ne sont pas d'écho ou de l'imprimer avant d'envoyer des en-têtes ou vous pouvez simplement utiliser
die()
ouexit()
après l'en-tête de la fonction.ici, vous ne serez pas face à tout problème
La plupart de ces réponses sont le fait d'oublier une très étape importante!
Laissant que l'essentiel de la seconde ligne, vous pourriez vous voir finir sur Le Daily WTF. Le problème est que les navigateurs ne sont pas ont de respecter les en-têtes de votre page de retour, donc, avec les en-têtes d'être ignoré, le reste de la page sera exécutée sans une redirection.
die();
vous a donné - si vous ne le faites pas, l'utilisateur peut voir la page complète, pour un moment, si vous ne l'utilisez; l'utilisateur sera redirigé et aucune temporaire contenu glitch montrera + 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()
ouinclude die()
.Beaucoup de ces réponses sont correctes, mais elles supposent que vous avez une URL absolue, qui ne peut pas être le cas. Si vous souhaitez utiliser un URL relative et de générer le reste, alors vous pouvez faire quelque chose comme ça...
Vous pouvez utiliser des variables de session pour contrôler l'accès aux pages et autoriser les utilisateurs valides ainsi:
http://php.net/manual/en/reserved.variables.session.php.
Récemment, j'ai eu des cyber-attaques et décidé, j'ai besoin de connaître les utilisateurs essayant d'accéder au Panneau d'administration ou réservés à la partie de l'Application web.
Donc, j'ai ajouté un journal des accès pour l'adresse IP et les sessions de l'utilisateur dans un fichier texte, parce que je ne veux pas embêter ma base de données.
header( 'Location: http://www.yoursite.com/new_page.html' );
J'ai déjà répondu à cette question, mais je vais le faire à nouveau, car dans le même temps, j'ai appris qu'il y a des cas spéciaux, si vous êtes en cours d'exécution dans la CLI (redirections ne peut pas se produire et donc ne devrait pas
exit()
) ou si votre serveur est en cours d'exécution de PHP en tant que (F)CGI (il a besoin d'un définies précédemmentStatus
en-tête de rediriger correctement).J'ai aussi traité de la question de supporter les différents redirection HTTP codes (
301
,302
,303
et307
), comme il a été abordé dans les commentaires de ma réponse précédente. Voici les descriptions:Vous pouvez utiliser du JavaScript méthodes 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");
Utilisation:
C'est régulier et normal PHP redirection, mais vous pouvez faire une redirection d'une page avec quelques secondes d'attente par le code ci-dessous:
Oui, vous pouvez utiliser le l'en-tête() fonction,
Et aussi de la meilleure pratique consiste à appeler la exit() fonction à droite après le
header()
fonction pour éviter l'exécution de code ci-dessous.Selon la documentation,
header()
doit être appelée avant toute sortie est envoyée.vous pouvez utiliser ce code de redirection d'une page à l'autre
ou si vous essayez de rediriger à l'aide de JavaScript en php puis utilisez balise de script pour rediriger
Comme d'autres ici, dit, l'envoi de l'en-tête location avec:
mais vous devez le faire avant que vous l'avez envoyée de toute autre sortie vers le navigateur.
Aussi, si vous allez l'utiliser pour bloquer les utilisateurs non authentifiés à partir de certaines pages, comme vous l'avez dit, gardez à l'esprit que certains agents utilisateurs va ignorer cette et continuer sur la page en cours de toute façon, de sorte que vous aurez besoin de die() après l'envoi.
but you need to do it before you've sent any other output to the browser.
Génial!! Été la recherche de quelques minutes sur pourquoi je continue de recevoir les headers already sent erreur. +1!!die()
est juste une façon de le faire.À la veille du web sémantique, l'exactitude est quelque chose à considérer. Malheureusement, PHP est le "Lieu"de l'en-tête utilise toujours le HTTP 302-code de redirection, ce qui, à proprement parler, n'est-ce pas le meilleur pour la redirection. La il doit utiliser au lieu de cela, est la Trois cent trois un.
W3C est assez aimable pour mention que le 303-d'en-tête est incompatible avec "beaucoup de pré-HTTP/1.1, les agents utilisateurs", ce qui reviendrait à aucun navigateur en cours d'utilisation. Ainsi, le 302 est une relique, qui ne devrait pas être utilisé.
...ou vous pourriez juste l'ignorer, comme tout le monde...
Voici mes réflexions:
À mon humble avis, la meilleure façon de rediriger les requêtes entrantes serait en utilisant l'emplacement des en-têtes, qui va
Une fois cette instruction est exécutée, et la sortie est envoyée, le navigateur va commencer à ré-orienter l'utilisateur. Cependant, de s'assurer qu'il n'y a pas eu de sortie (toute echo /var_dump) avant d'envoyer des en-têtes, sinon elle conduira à des erreurs.
Bien que c'est un moyen rapide et sale façon de parvenir à ce qui était initialement demandé, il finirait par être un SEO catastrophe, puisque ce type de redirection est toujours interprétée comme une 301 /302 redirection, donc les moteurs de recherche pourront toujours voir votre page d'index comme un re-dirigé à la page, et non pas quelque chose d'une landing page /page d'accueil.
Donc il aura une incidence sur le RÉFÉRENCEMENT paramètres du site.
De rediriger le visiteur vers une autre page (particulièrement utile dans une boucle conditionnelle), il suffit d'utiliser le code suivant:
Dans ce cas,
mypage.php
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)
Relatif/Absolu Chemin
Lorsque vous traitez avec des chemins relatifs ou absolus, il est idéal pour choisir un chemin d'accès absolu à partir de la racine du serveur (DOCUMENT_ROOT). Utilisez le format suivant:
Si jamais la page cible est sur un autre serveur, vous indiquez l'URL complète:
En-Têtes HTTP
Selon le protocole HTTP, les en-têtes HTTP envoyés doivent être
before
tout type de contenu. Cela signifie qu'aucun caractère ne doit jamais être envoyé avant le tête de même pas un espace vide!Temporaire/Permanent Des Redirections
Par défaut, le type de redirection présenté ci-dessus est temporaire. Cela signifie que les moteurs de recherche, tels que Google, ne prendra pas la redirection en compte lors de l'indexation.
Si vous souhaitez informer les moteurs de recherche qu'une page a été définitivement déplacé vers un autre emplacement, utilisez le code suivant:
Par exemple, cette page a le code suivant:
Lorsque vous cliquez sur le lien ci-dessus, vous êtes automatiquement redirigé vers cette page. En outre, il est une redirection permanente (Status: 301 moved permanently). Donc, si vous tapez la première URL dans Google, vous serez automatiquement redirigé vers la deuxième, redirigé lien.
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 à l'adresse indiquée lors de la redirection. Dans la plupart des cas, cela signifie que vous besoin d'une méthode pour suivre les
header()
fonction de laexit()
fonction, dans le but de réduire la charge du serveur:¶
(près de la fin du deuxième paragraphe)? Voulez-vous dire¶
à la place (si l'ensemble se litmypage.php?param1=val1¶m2=val2)
)? (L'entité HTML par) est "¶" - peut-être du programme externe a une conversion?).La meilleure façon de rediriger avec PHP, c'est le code suivant...
Assurez-vous que le code ne fonctionnera après
Tout le code doit être exécuté avant la ligne ci-dessus.
Supposons que,
Cas 1:
Il va rediriger correctement à l'emplacement (index.php).
Cas 2:
Le code ci-dessus ne sera pas rediriger vers l'emplacement (index.php).
Oui, il est possible d'utiliser PHP. Nous allons rediriger vers une autre page.
Essayer de code suivant:
pour rediriger utiliser ce code
Nous pouvons le faire de deux façons:
Lorsque l'utilisateur arrive sur https://bskud.com/PINCODE/BIHAR/index.php ensuite rediriger vers https://bskud.com/PINCODE/BIHAR.php
Par le ci-dessous de code PHP
Enregistrer le code ci-dessus dans https://bskud.com/PINCODE/BIHAR/index.php
Quand une condition est vraie, alors rediriger vers une autre page:
header()
fonction.Il y a deux façons de redirection
À l'aide de PHP
À L'Aide De Jquery
Utilisation:
1. À l'aide de
header
, un construit en fonction PHPa) Simple redirection sans paramètres
b) de Redirection avec des paramètres GET
2. Redirection en JavaScript en PHP
a) Simple redirection sans paramètres
b) de Redirection avec des paramètres GET
Si vous utilisez Apache, vous pouvez également utiliser .htaccess pour rediriger.
Vous pouvez tenter d'utiliser le PHP
header
fonction pour faire la redirection. Vous pouvez définir la mémoire tampon de sortie de sorte que votre navigateur ne prend pas en jeter une redirection d'avertissement à l'écran.Il y a plusieurs manières de le faire, mais si vous préférez le
php
, je vous recommande l'utilisation de laheader()
fonction.Fondamentalement
Si vous voulez donner un coup de pied d'un cran, il est préférable de l'utiliser dans les fonctions. De cette façon, vous êtes en mesure d'ajouter des authentifications et d'autres la vérification des elemnts en elle.
Laissez-vous tenter par la vérification de l'utilisateur du niveau.
Donc, supposons que vous avez enregistré l'utilisateur de niveau d'autorité lors d'une session appelée
u_auth
.Dans le
function.php
Vous pourrez ensuite appeler la fonction pour chaque page que vous voulez authentifier.
Comme dans
page.php
ou à toute autre page.Références;
l'aide de ce code pour mieux rediriger: