J'utilise ce code pour obtenir l'URL complète:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
Le problème est que j'utilise des masques dans mon .htaccess
, donc ce que nous voyons dans l'URL n'est pas toujours le vrai chemin du fichier.
Ce dont j'ai besoin, c'est d'obtenir l'URL, ce qui est écrit dans l'URL, rien de plus et rien de moins - l'URL complète.
J'ai besoin de savoir comment il apparaît dans la barre de navigation du navigateur Web, et non le vrai chemin du fichier sur le serveur.
Réponses:
Jetez un oeil à
$_SERVER['REQUEST_URI']
, c.- à -d.(Notez que la syntaxe de chaîne entre guillemets doubles est parfaitement correcte )
Si vous souhaitez prendre en charge HTTP et HTTPS, vous pouvez utiliser
Note de l'éditeur: l' utilisation de ce code a des implications en termes de sécurité . Le client peut définir HTTP_HOST et REQUEST_URI sur n'importe quelle valeur arbitraire qu'il souhaite.
la source
'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
Version courte pour afficher le lien sur une page Web
Voici quelques détails supplémentaires sur les problèmes et les cas marginaux du format //example.com/path/
Version complète
Il s'agit d'une version fortement modifiée de
http://snipplr.com/view.php?codeview&id=2734
.Structure URL:
schéma: // nom d'utilisateur: mot de passe @domaine: port / chemin? chaîne_query # fragment_id
Les parties en gras ne seront pas incluses par la fonction
Remarques:
username:password
partir d'une URL complète ou du fragment (hachage).#fragment_id
n'est pas envoyé au serveur par le client (navigateur) et ne sera pas ajouté à l'URL complète.$_GET
ne contiendra quefoo=bar2
pour une URL comme/example?foo=bar1&foo=bar2
.$_SERVER['REQUEST_URI']
et retourneront/example?foo=bar2
pour une URL comme/example?foo=bar1&foo=bar2
, utilisez$_SERVER['QUERY_STRING']
dans ce cas.URL + URN
, mais en raison d'une utilisation populaire, URL signifie désormais à la fois URI et URL.HTTP_X_FORWARDED_HOST
si vous ne prévoyez pas d'utiliser des procurations ou des équilibreurs.Host
tête doit contenir le numéro de port, sauf s'il s'agit du numéro par défaut.Variables contrôlées par le client (navigateur):
$_SERVER['REQUEST_URI']
. Tout caractère non pris en charge est codé par le navigateur avant d'être envoyé.$_SERVER['HTTP_HOST']
et n'est pas toujours disponible selon les commentaires du manuel PHP: http://php.net/manual/en/reserved.variables.php$_SERVER['HTTP_X_FORWARDED_HOST']
est défini par les équilibreurs et n'est pas mentionné dans la liste des$_SERVER
variables du manuel PHP.Variables contrôlées par le serveur:
$_SERVER['HTTPS']
. Le client choisit d'utiliser cela, mais le serveur renvoie la valeur réelle de vide ou "on".$_SERVER['SERVER_PORT']
. Le serveur accepte uniquement les numéros autorisés comme ports.$_SERVER['SERVER_PROTOCOL']
. Le serveur accepte uniquement certains protocoles.$_SERVER['SERVER_NAME']
. Il est défini manuellement dans la configuration du serveur et n'est pas disponible pour IPv6 selon kralyk .En relation:
HTTP_HOST vs SERVER_NAME
Le numéro de port est-il requis dans le paramètre d'en-tête "Host" HTTP?
https://stackoverflow.com/a/28049503/175071
la source
$_SERVER['REQUEST_URI']
montrera/example?foo=bar2
pour l'url comme/example?foo=bar1&foo=bar2
Host
tête, je ne l'ai pas vu défini comme ça, merci de l'avoir mentionné, l'ajoutera comme un tweakExemples pour:
https://(www.)example.com/subFolder/myfile.php?var=blabla#555
Remarquer ! ! !
#
parties de hashtag ont été utilisées manuellement dans l'exemple ci-dessus uniquement à des fins d'illustration, cependant, les langues côté serveur (y comprisphp
) ne peuvent pas les détecter nativement (seul Javascript peut le faire, car le hashtag n'est qu'unebrowser/client side
fonctionnalité).DIRECTORY_SEPARATOR
renvoie\
pour l'hébergement de type Windows, au lieu de/
.Pour WordPress
la source
Voici une solution utilisant une instruction ternaire , en gardant le code minimal:
C'est la façon la plus petite et la plus simple de le faire, en supposant que son serveur Web utilise le port standard 443 pour HTTPS .
la source
$_SERVER["HTTPS"] == "on"
pour vérifier si SSL est activé.Ma méthode multiplateforme préférée pour trouver l'URL actuelle est:
la source
Utilisez simplement:
la source
http://example.com
:8080
/request.php
et échouer. Ces réponses sont compliquées pour une raison.Remarque: Je viens de faire une mise à jour du code de Timo Huovinen , donc vous n'obtiendrez aucun paramètre GET dans l'URL. Cette URL est simple et supprime des choses comme
?hi=i&am=a&get
.Exemple:
sera affiché comme:
C'est bien sauf si vous utilisez des paramètres GET pour définir un contenu spécifique, auquel cas vous devez utiliser son code! :-)
la source
Code clair, fonctionnant sur tous les serveurs web (Apache, nginx, IIS, ...):
la source
Voici ma solution - le code est inspiré par Tracy Debugger . Il a été modifié pour prendre en charge différents ports de serveur. Vous pouvez obtenir l'URL complète actuelle, y compris
$_SERVER['REQUEST_URI']
ou simplement l'URL du serveur de base. Vérifiez ma fonction:Voici le code de test:
la source
http_build_url
nécessite pecl_http installéUtilisation:
Si vous souhaitez prendre en charge à la fois HTTP et HTTPS:
la source
Même technique que la réponse acceptée, mais avec prise en charge HTTPS , et plus lisible:
la source
J'ai créé cette fonction pour gérer l'URL:
la source
Utilisez cette ligne unique pour trouver l'URL du dossier parent (si vous n'avez pas accès à http_build_url () fourni avec pecl_http):
la source
C'est assez facile à faire avec vos variables d'environnement Apache. Cela ne fonctionne qu'avec Apache 2, que je suppose que vous utilisez.
Utilisez simplement le code PHP suivant:
la source
Essaye ça:
$_SERVER
est un tableau contenant des informations telles que les en-têtes, les chemins d'accès et les emplacements des scripts. Les entrées de ce tableau sont créées par le serveur Web. Il n'y a aucune garantie que chaque serveur Web fournira l'un de ces éléments; les serveurs peuvent en omettre certains ou en fournir d'autres non répertoriés ici. Cela dit, un grand nombre de ces variables sont prises en compte dans la spécification »CGI / 1.1, vous devriez donc pouvoir vous y attendre.$HTTP_SERVER_VARS
contient les mêmes informations initiales, mais n'est pas un superglobal. (Notez que$HTTP_SERVER_VARS
et$_SERVER
sont des variables différentes et que PHP les gère comme telles)la source
Vous pouvez utiliser http_build_url sans argument pour obtenir l' URL complète de la page actuelle:
la source
J'ai créé cette classe pour gérer mes URI
Bien sûr, vous devez l'adapter à vos besoins et à votre système!?!
Il doit encore être perfectionné mais c'est une solution divine pour un système URI centralisé: D
la source
Voici la solution à votre problème:
la source
J'ai utilisé cette déclaration.
J'espère que cela t'aidera.
la source
la source
J'ai utilisé le code ci-dessous, et cela fonctionne bien pour moi, dans les deux cas, HTTP et HTTPS.
Démo
la source
$_SERVER['HTTPS'] = 'off'
déclenchera le chemin HTTPS. Cela ne semble pas correct. D'un autre côté, je ne pense pas non plus que la logique d'origine soit correcte.la source
Voici la base d'une version plus sécurisée de la réponse acceptée, utilisant la fonction filter_input de PHP, qui compense également le manque potentiel de
$_SERVER['REQUEST_URI']
:Vous pouvez utiliser différents filtres pour le modifier à votre guise.
la source
Vous pouvez utiliser
HTTP_ORIGIN
comme illustré dans l'extrait ci-dessous:la source
Utilisation très simple:
la source
Je pense que cette méthode est bonne ... essayez-la
la source
Cela fonctionne à la fois pour HTTP et HTTPS.
Sortez quelque chose comme ça.
la source
Pour en savoir plus: Comment obtenir l'URL complète d'une page en utilisant PHP
la source