2013-01-21 149 views
3

我有一個奇怪的問題,我相信你們大多數人都意識到,這些問題是由某些開發人員無法控制的情況引起的!在URL中保留一個GET變量

我想了解如何在URL中始終保持查詢字符串參數。如果該參數沒有設置,我想默認添加到URL?param = something

我問了一個關於這個問題的前一個問題,並且已經能夠使用htaccess添加一個默認查詢 - 但是這個只適用於初始請求,而我需要確保它始終存在於地址中。

我想使用一個cookie - 用PHP設置,然後用.htaccess查詢。

所以,我問這是否可能,如果有更好的方式做到這一點?

+0

我真的要問。爲什麼? – webnoob

+0

如果您在提供值時使用默認值,那還不夠嗎? –

+0

您當然可以使用cookie,但我沒有看到其他解決方案的優勢。但請注意,cookie值不會填充到$ _GET超全局變量中。 – arkascha

回答

1

沒有改變所有的網址我不能看到這是可能的,正如討論這是一個非常hacky的方式來做到這一點。

我建議你給他們一個「特殊」的按鈕,他們用來複制鏈接。讓他們使用此按鈕來複制鏈接而不是URL。然後,您可以正確控制數據而不會黑客入侵網站。

編輯:你「可以」添加一些JQuery來添加所有鏈接與你的參數。你有沒有想過這個?

$(document).ready(function() { 
    $('a[href]').each(function() { 
    this.href = this.href + '?something=<?php echo $_SESSION["myparam"]; ?>' 
    }); 
}); 

你可以得到從初始頁面加載/會話帕拉姆但是這需要用戶擁有支持JS(很多人現在做的)。

p.s未經測試的半僞代碼。如果你決定走這條路,我可以正確地測試它。

+0

我創建了一個附加正確查詢字符串的頁面鏈接按鈕,但jQuery的想法很好,因爲我已經將它包含在網站上。謝謝 –

0

$_GET and $_POST超全局變量那些並不意味着像這樣使用。我不知道爲什麼它是必需的,但無論如何,您可以使用SessionCookies獲得所需的功能。你試圖做的是不實際的。行業標準是使用會話和cookie。試試看,我確信它會幫助你。如果您有任何問題,請告訴我。

+0

該會話已經運行並設置了用戶類型 - 但僅當?param =設置了某些內容時。如果該用戶轉到其他頁面,他們的會話仍處於活動狀態,但查詢字符串消失了。如果他們複製地址並將其發送給客戶端,則客戶端無法獲得正確的內容。這樣解釋嗎? –

+1

@AlexHolsgrove - 我現在看到您的問題。你不能給他們一個他們用來複制鏈接的「特殊」按鈕嗎?讓他們使用此按鈕來複制鏈接而不是URL。然後,您可以正確控制數據而不會黑客入侵網站。 – webnoob

+0

這是我最初的解決方案,但被更高的權力拒絕......看起來它現在是唯一可行的解​​決方案:) –

0

如果您使用的是Apache 2,那麼您可以添加一個重寫規則,將GET參數附加到每個在其URL中沒有「param = ...」的請求。類似(未經測試):

RewriteCond %{QUERY_STRING} !(\A|&)param= 
RewriteRule (.*) $1?param=defaultvalue [QSA] 

有關詳細信息,請參閱modrewrite 's doc。如果您想將其限制爲某個網址,您可以在%{REQUEST_URI}上添加另一個RewriteCond

+0

謝謝你的回答。我設法得到你的建議工作(請參閱我以前的問題:http://stackoverflow.com/questions/14339035/default-query-string-in-htaccess)但它不能完全解決我的問題。我已經實現了一個按鈕來複制URL並追加查詢字符串 - 這是一個快速而乾淨的解決方案 –

0

我大約3個月前才學會了PHP,所以我希望我不會帶領你走下一條路,這就是我會嘗試的。


編輯:自從我學習了php以來已經有大約5個月了。我之前的版本在編輯之前只能「建立」獲取追加(並且它可能不起作用)。

if (!isset($_GET['param'])) {$_GET['param'] = 'something';} 

$var = ''; 
while ($other_gets = $_GET) 
{ 
    foreach ($other_gets as $key=>$value) 
    { 
    if ($key = 'something') {}//do nothing we want the other gets 
    else {$var .= '&'.$key.'='.$value;} 
    } 
} 
$get = '?'.$user_param.$other_gets; 

的preg_replace您的擴展

$string = 'your webpage before output'; 
$patterns = array(); 
$patterns[0] = '/.html/'; 
$patterns[1] = '/.php/'; 
$patterns[2] = '/yoursite.com /';//with space 
$replacements = array(); 
$replacements[0] = '.html'.$get; 
$replacements[1] = '.php'.$get; 
$replacements[2] = 'yoursite.com/index.php'.$get; 

然後打印字符串

echo preg_replace($patterns, $replacements, $string);