Ответ 1
<?php
header("Status: 301 Moved Permanently");
header("Location:./content/index.html?". $_SERVER['QUERY_STRING']);
exit;
?>
atm Я использую следующие четыре строки, чтобы перенаправить пользователя на другую страницу на моем веб-сайте:
<?php
header("Status: 301 Moved Permanently");
header("Location: ./content/index.html");
exit;
?>
но есть проблема с использованием переменных строки запроса HTTP, таких как http://< url >?param=blah
они не присоединяются к URL-адресу понятным образом.
Есть ли разумный ход для реализации этого?
привет
<?php
header("Status: 301 Moved Permanently");
header("Location:./content/index.html?". $_SERVER['QUERY_STRING']);
exit;
?>
Чтобы сделать перенаправление и убедитесь, что дополнительный вопросительный знак не отображается, когда строка запроса не передается, используйте следующий
function preserve_qs() {
if (empty($_SERVER['QUERY_STRING']) && strpos($_SERVER['REQUEST_URI'], "?") === false) {
return "";
}
return "?" . $_SERVER['QUERY_STRING'];
}
header("Status: 301 Moved Permanently");
header("Location: ./content/index.html" . preserve_qs());
Я хотел бы добавить еще один вариант...
Anyways - как и другие, сказал, что использование (.htaccess) mod_rewrite, вероятно, будет лучшим вариантом.
Однако, конечно, может быть много ситуаций, когда вам нужно это делать в PHP = > у вас есть 2 варианта:
$_SERVER['QUERY_STRING']
http_build_query($_GET);
Вариант 2. - Преимущества (+)
$_GET
вроде: $_GET['new_param']="new value";
(добавить) unset($_GET['param_to_remove']);
(удалить)$_GET
= > независимое от окружающей средыhttp_build_query()
1-й параметр может фактически быть ЛЮБЫМ массивом или объектом, поэтому вы можете построить $_GET
-подобный запрос от $_POST
или $o = new YourObject();
при необходимостиВариант 2. - Недостатки (-)
Подробнее см. http://www.php.net/manual/en/function.http-build-query.php - справочный сайт PHP о функции http_build_query()
, которая Returns a URL-encoded string.
Использование $_SERVER['QUERY_STRING']
и добавление его в конец вашего перенаправления может быть тем, что вы ищете.
РЕДАКТИРОВАТЬ: Только что я немного опоздал с ответом.
Во-первых, почему бы не перенаправлять с помощью mod rewrite?
Но в любом случае вы можете выполнить $_SERVER ['QUERY_STRING'] до конца вашего URL
Добавьте $_SERVER['REQUEST_URI']
или QUERY_STRING
. Сделайте print_r($_SERVER);
, чтобы увидеть дополнительную информацию о запрошенном URL.
Я также предложил бы использовать mod_rewrite для этой задачи, вы можете быть более гибкими.