2009-08-16 5 views
111

En PHP, comment puis-je obtenir l'URL de la page en cours? De préférence seulement les parties après http://domain.com.Comment obtenir l'URL de la page actuelle en PHP

+0

S'il vous plaît voir cette réponse: http://stackoverflow.com/questions/6768793/php-get-the-full-url/8891890 # 8891890 –

+7

Je trouve ça marrant que cette question soit marquée comme une copie d'une autre malgré le fait qu'on l'ait demandé deux ans plus tôt – cameronjonesweb

+2

@cameronjonesweb Et que l'autre question a une portée totalement différente (obtenir l'URL complète), par opposition à celle-ci la page en cours seulement) – person27

Répondre

216
$_SERVER['REQUEST_URI'] 

Pour plus de détails sur ce que les informations sont disponibles dans le tableau $ _SERVER, voir the PHP manual page for it.

Si vous avez aussi besoin de la chaîne de requête (le bit après la ? dans une URL), cette partie est dans cette variable:

$_SERVER['QUERY_STRING'] 
+5

Vous pouvez également utiliser $ _SERVER ['PHP_SELF'] –

+11

iirc, PHP_SELF et REQUEST_URI auront des valeurs différentes si la page a été redirigée via mod_rewrite - le premier a le chemin vers le script actuel, le second a le chemin initialement demandé. – Amber

+1

Err, au moins dans mon apache, 2.2.4, avec PHP 5.3, REQUEST_URI contient le truc après le? déjà ... – Kzqai

22
$uri = $_SERVER['REQUEST_URI']; 

Cela vous donnera le répertoire demandé et le nom du fichier. Si vous utilisez mod_rewrite, ceci est extrêmement utile car il vous indique quelle page l'utilisateur regardait. Si vous avez besoin du nom de fichier réel, vous pouvez essayer $_SERVER['PHP_SELF'], la constante magique __FILE__ ou $_SERVER['SCRIPT_FILENAME']. Les 2 derniers vous donnent le chemin complet (à partir de la racine du serveur), plutôt que juste la racine de votre site web. Ils sont utiles pour les inclusions et autres.

$_SERVER['PHP_SELF'] vous donne le nom du fichier relatif à la racine du site Web.

$relative_path = $_SERVER['PHP_SELF']; 
$complete_path = __FILE__; 
$complete_path = $_SERVER['SCRIPT_FILENAME']; 
9

Les autres réponses sont correctes. Cependant, une note rapide: si vous cherchez à saisir les choses après le ? dans un URI, vous devez utiliser le tableau $_GET[].

0

vous pouvez utiliser $ _SERVER [ « HTTP_REFERER »] cela vous donnera toute URL par exemple: supposons que vous voulez obtenir url du nom du site www.example.com puis $ _SERVER [ « HTTP_REFERER »] vous donnera https://www.example.com

+0

Pourquoi ma variable $ _SERVER ne contient-elle pas cet élément ?? – Daria

+1

'$ _SERVER ['HTTP_REFERER']' fait exactement ce qu'il dit sur l'étain, et c'est obtenir l'URL de la page qui a envoyé l'utilisateur à la page ... I.E Le referer. – Dendromaniac

+6

Les personnes qui ont réservé cette réponse auront du mal à déboguer leur code.'HTTP_REFERER' n'est pas la page en cours, c'est l'utilisateur de la page qui était avant la page en cours. – AliBZ

61

si vous voulez seulement les parties de url après http://domain.com, essayez ceci:

<?php echo $_SERVER['REQUEST_URI']; ?> 

si l'URL actuelle était http://domain.com/some-slug/some-id, l'écho ne renverra que '/ une limace/some-id'.

si vous voulez que l'URL complète, essayez ceci:

<?php echo 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?> 
+0

m'a aidé. merci – Daria

+13

Ne devriez-vous pas vérifier si 'HTTPS: //' est activé? J'ai trouvé cette fonction pour vérifier: (! Empty ($ _ SERVER [ 'HTTPS']) && $ _SERVER [ 'HTTPS'] == 'off') 'fonction isSSL() { \t \t retour \t \t \t \t \t \t || $ _SERVER ['SERVER_PORT'] == 443; \t \t} ' – Dendromaniac

Questions connexes