3

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

我想弄清楚如何始终在 URL 中保留查询字符串参数。如果未设置参数,我希望将默认值附加到 URL ?param=something

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

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

所以,我问这是否可能,是否有更好的方法来做到这一点?

4

4 回答 4

1

在不更改所有 URL 的情况下,我看不到这是可能的,正如所讨论的那样,这是一种非常老套的方法。

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

编辑:您“可以”添加一些 JQuery 以将所有链接附加到您的参数中。你有没有想过这个?

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

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

ps 未经测试的半伪代码。如果你决定走这条路,我可以正确地测试它。

于 2013-01-21T11:40:00.557 回答
0

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

于 2013-01-21T11:07:58.093 回答
0

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

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

有关详细信息,请参阅modrewrite 的文档。如果您想将其限制为某个 URL,RewriteCond您可以添加另一个。%{REQUEST_URI}

于 2013-01-21T12:09:47.080 回答
0

我大约 3 个月前才学会了 php,所以我希望我不会带你走上一条路,这是我会尝试的。


编辑:自从我学习 php 到现在已经大约 5 个月了。我在此编辑之前的上一个版本仅“构建”了 get to append(它可能不起作用)。

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);
于 2013-04-10T16:15:53.697 回答