Строка запроса без аргументов GET в PHP

Есть ли простой способ получить запрошенный файл или каталог без аргументов GET? Например, если URL-адрес: http://mysite.com/directory/file.php?paramater=value я хотел бы вернуть только http://mysite.com/directory/file.php . Я был удивлен, что в $_SERVER[] нет простого индекса. Я пропустил один? Благодаря!

Related of "Строка запроса без аргументов GET в PHP"

Вы можете использовать $_SERVER['REQUEST_URI'] чтобы получить запрошенный путь. Затем вам нужно удалить параметры …

 $uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2); 

Затем добавьте имя хоста и протокол.

 echo 'http://' . $_SERVER['HTTP_HOST'] . $uri_parts[0]; 

Обратите внимание, что вам также придется обнаруживать протокол, если вы смешиваете http: и https:// . Это я оставляю для вас упражнение.

Лучший ответ здесь – от RiaD :

Stackoverflow: как удалить запрос и получить только URL?

Вы можете использовать strtok для получения строки до первого появления?

 $url=strtok($_SERVER["REQUEST_URI"],'?'); 

Замечание по производительности. Эта проблема также может быть решена с помощью взрыва .

  • Explode имеет тенденцию лучше работать для случаев, разделяющих sring только на одном ограничителе.
  • Strtok имеет тенденцию работать лучше для случаев, использующих несколько разделителей.

Это приложение strtok для возврата всего в строку до первого экземпляра символа будет работать лучше, чем любой другой метод в PHP, хотя WILL оставит запрос в памяти.

Самое простое решение:

echo parse_url ($_SERVER["REQUEST_URI"], PHP_URL_PATH);

Я на самом деле думаю, что это не лучший способ разобрать его. Это не чисто или немного из-за темы …

  • Взрыв тяжелый
  • Сессия тяжелая
  • PHP_SELF не обрабатывает URLRewriting

Я бы сделал что-то вроде …

 if ($pos_get = strpos($app_uri, '?')) $app_uri = substr($app_uri, 0, $pos_get); 
  • Это определяет, существует ли фактическое значение?? (Стандартный формат GET)
  • Если все в порядке, это сокращает нашу переменную до '?' который зарезервирован для получения данных

Учитывая $ app_uri как URI / URL моего сайта. Пожалуйста.

Вы можете использовать $_GET для параметров url или $_POST для post params, но $_REQUEST содержит параметры из $_GET $_POST и $_COOKIE , если вы хотите скрыть параметр URI от пользователя, вы можете преобразовать его в сеанс переменная такая:

 <?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> 

РЕДАКТИРОВАТЬ

используйте $_SERVER['PHP_SELF'] чтобы получить текущее имя файла или $_SERVER['REQUEST_URI'] чтобы получить запрошенный URI

Почему так сложно? знак равно

 $baseurl = 'http://mysite.com'; $url_without_get = $baseurl.$_SERVER['PHP_SELF']; 

это должно действительно сделать это человек;)

Вот решение, которое учитывает разные порты и 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']; 

Или более базовое решение, которое не учитывает другие порты:

 $pageURL = (@$_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://'; $pageURL .= $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; 

Не всем это будет просто, но я считаю, что это лучший способ обойти это:

 preg_match('/^[^\?]+/', $_SERVER['REQUEST_URI'], $return); $url = 'http' . ('on' === $_SERVER['HTTPS'] ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $return[0] 

То, что происходит, это просто пройти через REQUEST_URI с начала строки, а затем остановиться, когда он попадет в «?» (что действительно, только должно произойти, когда вы добираетесь до параметров).

Затем вы создаете URL-адрес и сохраняете его до $ url:
При создании $ url … То, что мы делаем, просто пишет «http», а затем проверяет, используется ли https, если это так, мы также пишем «s», затем мы объединяем «: //», объединяем HTTP_HOST (сервер, fx: «stackoverflow.com») и конкатенировать возвращаемый $ return, который мы обнаружили ранее, (это массив, но нам нужен только первый индекс в нем … Там может быть только один индекс , так как мы проверяем начало строки в регулярном выражении.).

Я надеюсь, что кто-то сможет это использовать …

PS. Это подтверждено, работая при использовании SLIM, чтобы перенаправить URL-адрес.

У меня была такая же проблема, когда мне нужна ссылка на домашнюю страницу. Я пробовал это, и это сработало:

 <a href="<?php echo $_SESSION['PHP_SELF']; ?>?"> 

Обратите внимание на знак вопроса в конце. Я считаю, что говорит, что машина перестает думать от имени кодера 🙂