你可以只需在选择中添加一个url参数,并确保它始终在所有内部链接中找到。我假设你不想这样做,因为它有太多的变化。
一些备选思路:
IDEA 1:
保存会话内或一个cookie内的初始选择。同时为所有页面添加一个可选的url参数,该参数也包含选择内容。为了避免更改所有内部链接,请检查服务器端是否给出了选择url参数。如果不是,则只需添加url参数(根据会话/ cookie),立即重定向到相同的url。通过这种方式,url参数将始终显示,无需改变所有内部链接,用户仍然可以共享链接。
为了实现起见,我们假设我们的会话变量为$_SESSION['sel']
,我们的可选URL参数为psel
。假设网站中的所有页面都通过php提供。 PHP的下面几行应该出现在所有页面的顶部(可以放置在一个单独的PHP文件,并包含在每一页):
if (!isset($_REQUEST['psel']))
{
header('Location: '.$_SERVER['REQUEST_URI'].'&psel='.$_SESSION['sel']);
exit;
}
这是伪代码,我在我的iPad这么原谅我如果它有点短而不完美。该行所做的是检查URL参数是否已定义,如果没有,则重定向(到同一页面)并根据我们的会话变量进行定义。这种方式即使我们有一个不包含URL参数的内部链接,这个重定向也会添加它。请求中有一个关于?
的小错误,我会让你修复它。
这段代码并没有改变所有的内部链接,它只做了以下几点:当一个内部链接被访问并且URL参数被省略(如通常那样),这段代码将停止页面不显示参数并重定向到与param相同的页面。
另一个重要的代码是在定义URL参数的情况下更改我们的会话变量。这可以通过添加这个else块到上面的代码来完成:
else $_SESSION['sel'] = $_REQUEST['psel'];
这样,当URL是由2个用户共享,这将始终包含psel
URL PARAM当新用户第一次访问它,它会相应地设置他的会话变量。
IDEA 2:
创建的每个选择一个 “假” 的目录。例如,假设您的网站为http://example.com/index.php,那么您将拥有http://example.com/sel1/index.php和http://example.com/sel2/index.php。这些目录不是真实的,使用.htaccess重写(甚至FS中的符号链接)实际上会指向原始文件。除此之外,现在你在路径中有这个神奇的参数。这很有用,因为路径将通过所有相关链接保持不变,这意味着您不必更改所有内部链接。如果您需要访问当前选择,您可以通过解析当前网址的路径轻松获取。
这个想法我觉得好一点,因为它实现了同样的事情,没有重定向。使用符号链接解释最简单,但请记住,这也可以使用.htaccess重写规则来完成。 Linux中的符号链接是链接到另一条路径的路径。如果我运行(通常使用我的服务器上SSH)以下控制台命令:
ln -s . sel1
ln -s . sel2
它将里面创建2个目录。 (本地目录),命名为sel1和sel2,但它们只是指向原始当前目录的链接。如果当前目录是我的web服务器的根目录,效果是访问:
http://example.com/sel1/index.php
实际上将获得:
http://example.com/index.php
请注意,这不是目录的副本。如果我对index.php或本地目录中的任何其他文件进行了更改,这些更改也将反映在/sel1
和/sel2
这有什么用?如果我想显示选择2,我将使用网址http://example.com/sel2/index.php
,而不是访问我的常规网站。由于符号链接,此网址的行为与我的原始网站http://example.com/index.php
完全相同。
现在让我们假设我想检查php如果我显示选择2或不,我可以简单地检查变量$_SERVER['REQUEST_URI']
,看看它是否包括路径/sel2
或不。
此路径在所有内部URL之间将保持不变,因为它们通常是相对的。
没有魔法。您需要手动将其附加到您的代码生成的所有链接的查询字符串中。 – meagar
使用会话值,但不显式添加url参数。这不是一个好习惯,并且不是一个好的用户体验(保持干净的URL)。会话值是登录的。 – Amelia