Могу ли я изменить URL, используя только PHP, а не .htaccess? - PullRequest
1 голос
/ 20 января 2012

Моя конечная цель - убрать строку запроса из URL, используя php.Поэтому я не хочу удалять его до того, как в PHP появятся изменения для использования параметров строки запроса.

Я хочу взять: "http://www.mysite.com? Id = 3993993"

и сделать что-то с $ _GET ['id'], используя PHP,

и затем удалить "? id = 3993993 "из URL, оставляющего нас с" http://www.mysite.com".

Любые идеи о том, как это можно сделать?

Ответы [ 7 ]

2 голосов
/ 20 января 2012

Вы можете извлечь значение из $_GET и сохранить его в $_SESSION, а затем перенаправить:

// Load the id from GET into SESSION
session_start();
$_SESSION['id'] = isset($_GET['id']) ? $_GET['id'] : NULL;

// Reidrect to the new URL
if (isset($_GET['id'])) {
  header("Location: http://www.mysite.com");
  exit();
}

// Reload the value from $_SESSION if it is there (and not also in $_GET)
if (!empty($_SESSION['id']) && !isset($_GET['id'])) {
  $id = $_SESSION['id'];
  // Remove it from SESSION to prevent accidental reloads
  unset($_SESSION['id']);
}
0 голосов
/ 20 января 2012

Я бы не советовал вам делать это, но одним из решений может быть установка файла cookie, регистрация переменной сеанса, содержащей параметр запроса, а затем перенаправление пользователя со страницы http://www.mysite.com/?id=3993993 на http://www.mysite.com/

<?php 
session_start();
$_COOKIE['something'] = md5($whatever);
$_SESSION['query'] = $_SERVER['QUERY_STRING'];

if ($_SERVER['QUERY_STRING'] != '/')
   header("Location: /");

if ( isset ($_SESSION['query']) ){
   /* display your page */
}
?>

Я настоятельно советую вам НЕ использовать это: большинство поисковых роботов не принимают куки.

Я не тестировал этот скрипт.

0 голосов
/ 20 января 2012

Единственный способ, которым я могу подумать, это захватить любые значения GET, сохранить их в сеансе, а затем перенаправить на ту же страницу без установленных параметров.

if(!empty($_GET)) {
    $_SESSION['GET'] = $_GET;
    $url = parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);
    header('Location: '.$url);
    die();
}


if(!empty($_SESSION['GET'])) {
    $_GET = $_SESSION['GET'];
    unset($_SESSION['GET']);
}
0 голосов
/ 20 января 2012

Единственный способ, которым это можно сделать, - это заставить PHP «запомнить» значение «id», потому что как только он перенаправляет на «mysite», у него больше не будет данных.

Я бы использовал данные Cookie или Session, которые являются постоянными, даже если страница обновляется.

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

$_SESSION['tempid'] = $_GET['id']; //for remembering the data
header("Location: index.php"); //redirect

Затем вы можете обращаться к этой переменной в любое время, используя переменную сеанса:

$dosomethingwith = $_SESSION['tempid'];
unset($_SESSION['tempid']);

Возможно, вы захотите очистить переменную сеанса после того, как вы использовали tempid

0 голосов
/ 20 января 2012

Сделайте редирект и проверьте реферер. Вы также можете сохранить его в файле cookie или в переменной $ _SESSION, чтобы быть в безопасности.

0 голосов
/ 20 января 2012

Вы можете перенаправить на http://www.mysite.com:

header('Location: http://www.mysite.com');

Обратите внимание, что вы не можете сделать это после того, как вы выводили какой-либо контент, поэтому, если вы хотите генерировать вывод на основе этого идентификатора, у вас возникла проблема. Вы можете сохранить идентификатор в сеансе, а также прочитать и обработать его после перенаправления, но это не сработает, если клиент отключил файлы cookie.

0 голосов
/ 20 января 2012

Вы можете сделать это с помощью функции PHP Заголовок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...