Existe-t-il un moyen simple d’obtenir le fichier ou le répertoire demandé sans les arguments GET? Par exemple, si l'URL est http://mysite.com/directory/file.php?paramater=value
, j'aimerais renvoyer uniquement http://mysite.com/directory/file.php
. J'ai été surpris qu'il n'y ait pas un index simple dans $_SERVER[]
. En ai-je manqué un? Merci!
Vous pouvez utiliser $_SERVER['REQUEST_URI']
pour obtenir le chemin demandé. Ensuite, vous devrez supprimer les paramètres ...
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
Ajoutez ensuite le nom d'hôte et le protocole.
echo 'http://' . $_SERVER['HTTP_Host'] . $uri_parts[0];
Notez que vous devrez également détecter le protocole si vous mélangez http:
et https://
. Que je laisse comme un exercice pour vous.
(s'il vous plaît upvote cette réponse afin qu'il puisse être plus visible).
La solution la plus simple serait:
echo parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
Parse_url est une fonction php intégrée dont le seul but est d'extraire des composants spécifiques d'une url, y compris la PATH
(tout ce qui se trouve avant le premier ?
). En tant que tel, c’est ma nouvelle "meilleure" solution à ce problème.
Stackoverflow: Comment supprimer la chaîne de requête et obtenir uniquement l'URL?
Vous pouvez utiliser strtok pour obtenir une chaîne avant la première occurrence de?
$url=strtok($_SERVER["REQUEST_URI"],'?');
Performance Remarque: Ce problème peut également être résolu à l'aide de explode .
Cette application de strtok pour renvoyer tous les éléments d'une chaîne avant la première instance d'un caractère fonctionnera mieux que toute autre méthode en PHP, même si elle laissera la chaîne de requête en mémoire.
Solution:
echo
parse_url
($_SERVER["REQUEST_URI"], PHP_URL_PATH);
Je pense en fait que ce n'est pas la bonne façon de l'analyser. Ce n'est pas propre ou c'est un peu hors sujet ...
Je ferais quelque chose comme ...
if ($pos_get = strpos($app_uri, '?')) $app_uri = substr($app_uri, 0, $pos_get);
Considérant que $ app_uri est l’URI/URL de mon site Web. Vous êtes les bienvenus.
Voici une solution qui prend en compte différents ports et https:
$pageURL = (@$_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
if ($_SERVER['SERVER_PORT'] != '80')
$pageURL .= $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF'];
else
$pageURL .= $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
Ou une solution plus basique qui ne prend pas en compte les autres ports:
$pageURL = (@$_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
$pageURL .= $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
Vous pouvez utiliser $_GET
pour les paramètres d'URL ou $_POST
pour les paramètres de publication, mais le $_REQUEST
contient les paramètres de $_GET
$_POST
et de $_COOKIE
. Si vous souhaitez masquer le paramètre URI de l'utilisateur, vous pouvez le convertir en une variable de session, comme suit:
<?php
session_start();
if (isset($_REQUEST['param']) && !isset($_SESSION['param'])) {
// Store all parameters received
$_SESSION['param'] = $_REQUEST['param'];
// Redirect without URI parameters
header('Location: /file.php');
exit;
}
?>
<html>
<body>
<?php
echo $_SESSION['param'];
?>
</body>
</html>
MODIFIER
utilisez $_SERVER['PHP_SELF']
pour obtenir le nom du fichier actuel ou $_SERVER['REQUEST_URI']
pour obtenir l'URI demandé
Tout le monde ne trouvera pas cela simple, mais je pense que c'est la meilleure façon de le contourner:
preg_match('/^[^\?]+/', $_SERVER['REQUEST_URI'], $return);
$url = 'http' . ('on' === $_SERVER['HTTPS'] ? 's' : '') . '://' . $_SERVER['HTTP_Host'] . $return[0]
Ce que fait est simplement de parcourir le REQUEST_URI depuis le début de la chaîne, puis de s’arrêter quand il frappe un "?" (ce qui ne devrait vraiment arriver que lorsque vous arrivez aux paramètres).
Ensuite, vous créez l'URL et enregistrez-le dans $ url:
Lors de la création de l'URL $ ... Ce que nous faisons est simplement d'écrire "http", puis de vérifier si https est utilisé. Si c'est le cas, nous écrivons également "s", puis nous concaténons ": //", concaténer le HTTP_Host (le serveur, fx: "stackoverflow.com"), et concaténer le $ return, que nous avons trouvé auparavant, à cela (c'est un tableau, mais nous voulons seulement le premier index qu'il contient ... Il ne peut que jamais être un index, puisque nous vérifions depuis le début de la chaîne dans la regex.).
J'espère que quelqu'un pourra utiliser ça ...
PS. Cela a été confirmé pour fonctionner tout en utilisant SLIM pour rediriger l'URL.
Je sais que c'est un ancien message, mais j'ai le même problème et je l'ai résolu de cette façon.
$current_request = preg_replace("/\?.*$/","",$_SERVER["REQUEST_URI"]);
Ou équivalent
$current_request = preg_replace("/\?.*/D","",$_SERVER["REQUEST_URI"]);
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
$request_uri = $uri_parts[0];
echo $request_uri;
Pourquoi si compliqué? =)
$baseurl = 'http://mysite.com';
$url_without_get = $baseurl.$_SERVER['PHP_SELF'];
cela devrait vraiment le faire l'homme;)