在URL中保留一个GET变量

时间:2013-01-21 11:00:43

标签: php .htaccess session cookies session-cookies

我有一个奇怪的问题,我相信大多数人都会意识到这些问题是由开发人员无法控制的某些情况引起的!

我想弄清楚如何在URL中始终保持querystring参数。如果没有设置参数,我想将一个默认值附加到URL?param = something

我问了一个与之相关的问题,并且能够使用htaccess添加默认查询 - 但这仅适用于初始请求,而我需要确保它始终存在于地址中。

我正在考虑使用cookie - 用PHP设置然后用.htaccess查询。

所以,我问这是否可行,是否有更好的方法呢?

4 个答案:

答案 0 :(得分:1)

在不改变所有网址的情况下,我无法看到这是可能的,正如所讨论的那样,这是一种非常黑客的方式。

我建议你给他们一个“特殊”按钮,用于复制链接。让他们使用此按钮复制链接而不是URL。然后,您可以在不破坏网站的情况下正确控制数据。

编辑:你“可以”添加一些JQuery来附加你的param的所有链接。你有没有想过这个?

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

您可以从初始页面加载/会话中获取参数,但这需要您的用户启用JS(大多数人现在都这样做)。

p.s未经测试的半伪代码。如果您决定沿着这条路走下去,我可以正确地测试它。

答案 1 :(得分:0)

$_GET$_POST超全局变量那些不应该像这样使用。我不知道为什么需要它,但无论如何,您可以使用SessionCookies获得所需的功能。你想做的事情是不切实际的。行业标准是使用会话和cookie。尝试一下我肯定它会帮助你肯定。如果您有任何问题,请告诉我。

答案 2 :(得分:0)

如果您使用的是Apache 2,那么您可以添加一个重写规则,将GET参数附加到其URL中没有“param = ...”的每个请求。像(未经测试)的东西:

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

有关详细信息,请参阅modrewrite 's doc。如果您想将此限制为某个网址,则可以在RewriteCond上添加其他%{REQUEST_URI}

答案 3 :(得分: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);