簡體   English   中英

php重定向HTTP查詢字符串變量

[英]php redirect with HTTP query string variables

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());

我想補充一個選項......
無論如何 - 就像其他人所說的那樣,使用( .htaccessmod_rewrite可能是最好的選擇。

然而,
當你必須在PHP中執行它時,肯定會有很多情況=>你有兩個選擇:

  1. 使用$_SERVER['QUERY_STRING']附加重定向URI
  2. 使用自己構建查詢附加重定向URI: http_build_query($_GET);

選項2. - 優勢(+)

  • 對參數進行編碼(默認為PHP_QUERY_RFC1738
  • 你可以輕松添加(或刪除)一些$_GET參數,如:
    $_GET['new_param']="new value"; (加)
    unset($_GET['param_to_remove']); (去掉)
  • 如果環境(上帝知道為什么)不提供QUERY_STRING - 你可能仍然能夠獲得超全球$_GET =>環境獨立
  • http_build_query()的第一個參數實際上可以是任何數組或對象,因此您可以從$_POST$o = new YourObject();構建$_GET類似的請求$o = new YourObject(); 如有必要
  • 如有必要,您可以更改參數分隔符

選項2. - 缺點( - )

  • 這種建築查詢可能是多余的(“無用”),只是不必要的......
  • 如果查詢是大enaugh(可能是一些攻擊?)它可能會影響性能,因為每次都會有一個數組轉換為字符串&編碼

有關詳細信息,請參閱http://www.php.net/manual/en/function.http-build-query.php - 一個關於http_build_query()函數的PHP手冊網站,它Returns a URL-encoded string.

使用$_SERVER['QUERY_STRING']並將其附加到重定向的末尾可能就是您要找的內容。

編輯:剛剛注意到我的回復有點晚了。

首先,為什么不重新導入mod重寫?

但無論如何,您可以將$ _SERVER ['QUERY_STRING']連接到您網址的末尾

添加$_SERVER['REQUEST_URI']QUERY_STRING 做一個print_r($_SERVER); 查看有關請求的URL的更多信息。

我還建議使用mod_rewrite執行此任務,您可以更靈活。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM