Изменить URL с помощью PHP - PullRequest
       0

Изменить URL с помощью PHP

0 голосов
/ 28 сентября 2011

например. У меня есть страница с URL http://mysite.com?page=3&var=10 также есть форма на странице.

Когда форма отправлена, в php есть некоторые действия, но мне нужно удалить это ?page=3&var=10 после того, как форма была отправлена ​​каким-либо образом, есть ли способ совместимости со всеми браузерами через PHP без mod_rewrite?

Ответы [ 6 ]

1 голос
/ 11 февраля 2018

Это старая тема, но на всякий случай, если кто-то еще будет искать ее в будущем, вы можете использовать javascript replaceState, чтобы изменить историю и метку панели браузера. Простая функция php для этого:

function set_url( $url )
{
    echo("<script>history.replaceState({},'','$url');</script>");
}

Затем просто вызовите эту функцию с нужным URL-адресом (предположительно, отбрасывая переменные записи):

set_url("http://example.com");

У перезагрузки страницы или возврата после вызова другой страницы теперь будет новое местоположение URL в истории.

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

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

используйте parse_str, чтобы получить строку запроса в виде ассоциативного массива, который легко изменить.Затем используйте http_build_query для преобразования ассоциативного массива в строку запроса.

$queryString = $s['QUERY_STRING'];
$params = array();
parse_str($queryString, $params);
//change $params as needed
$queryString = http_build_query($params);
if ($queryString) {
  $queryString = '?'.$queryString;
}
return preg_replace("/\\?.*/s","",$s['REQUEST_URI']).$queryString;

preg_replace("/\\?.*/s","",$s['REQUEST_URI']) удаляет исходную строку запроса, позволяя заменить ее.

0 голосов
/ 28 сентября 2011

Если вы используете action=index.php, то все значения будут опубликованы в индексе php, ?page=3&var=10 будет автоматически удалено.

Если вы хотите опубликовать на той же странице, вы можете использовать 'action = index.php? Page = 3 & var = 10' или action=<?php echo $_SERVER['PHP_SELF'] ?>

Вы можете проверить в началестраницу, если что-то отправлено, а затем перенаправить на что угодно с помощью header('Location: <a href="http://www.example.com/" rel="nofollow">http://www.example.com/</a>'); Подробнее о функции заголовка http://php.net/manual/en/function.header.php

0 голосов
/ 28 сентября 2011

mod_rewrite не может влиять на то, что отображается в адресной строке браузера пользователя, ЕСЛИ ЗАПИСЬ не выполняет внешне видимое перенаправление. Иначе это только переписывает вещи внутри веб-сервера, и это невидимо для пользователя.

Если вы хотите повлиять на адресную строку пользователя, вам придется выполнить перенаправление через header('Location: ...') после завершения обработки формы.

0 голосов
/ 28 сентября 2011

Да, решение довольно простое (даже если не совсем оптимизировано для SEO):

<?php
 header("Location: http://mysite.com")
?>

только для информации ... зачем вам это нужно?

0 голосов
/ 28 сентября 2011

Это работает для вас?

header('Location:/');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...