您可以简单地在选择中添加一个 url 参数,并确保它始终可以在所有内部链接中找到。我假设你不想这样做,因为它有太多的变化。
一些替代的想法:
想法 1:
将初始选择保存在会话内或 cookie 内。还为所有页面添加一个可选的 url 参数,该参数也包含选择。为避免更改所有内部链接,请检查服务器端是否提供了选择 url 参数。如果不是,请立即重定向到相同的 url,只需添加 url 参数(根据会话/cookie)。这样 url 参数将始终出现,而无需更改所有内部链接,并且用户仍然可以共享链接。
为了实现,假设我们的会话变量是$_SESSION['sel']
并且我们的可选 URL 参数是psel
。假设站点中的所有页面都是通过 php 提供的。以下 php 行应该出现在所有页面的顶部(可以放在单独的 php 文件中并包含在每个页面中):
if (!isset($_REQUEST['psel']))
{
header('Location: '.$_SERVER['REQUEST_URI'].'&psel='.$_SESSION['sel']);
exit;
}
这是伪代码,我在我的 iPad 上,如果它有点短而且不完美,请原谅。此行的作用是检查 URL 参数是否已定义,如果未定义,则重定向(到同一页面)并根据我们的会话变量定义它。这样即使我们有一个不包含 URL 参数的内部链接,这个重定向也会添加它。请求 uri 中有一个小错误?
,我会让你修复它。
此代码不会更改所有内部链接,它所做的只是以下内容:当访问内部链接并且省略 URL 参数(通常会)时,此代码将停止页面在没有参数的情况下显示并重定向到与参数相同的页面。
另一个重要的代码是更改我们的会话变量,以防 URL 参数被定义。这可以通过将这个 else 块添加到上面的代码中来完成:
else $_SESSION['sel'] = $_REQUEST['psel'];
这样,当 URL 被 2 个用户共享时,它将始终包含psel
URL 参数,并且当新用户第一次访问它时,它将相应地设置他的会话变量。
想法 2:
为每个选择创建一个“假”目录。例如,假设您的网站是http://example.com/index.php,那么您将拥有http://example.com/sel1/index.php和http://example.com/sel2/index。 .php _ 这些目录不是真实的,使用 .htaccess 重写(甚至 FS 中的符号链接)实际上将指向原始文件。除了,现在你在路径中有这个神奇的参数。这很有用,因为路径将在所有相对链接中保持不变,这意味着您不必更改所有内部链接。如果需要访问当前选择,可以通过解析当前url的路径轻松获取。
我认为这个想法更好一点,因为它无需重定向即可实现相同的目标。用符号链接来解释是最容易的,但请记住,这也可以用 .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,我将使用 URL,而不是访问我的常规站点http://example.com/sel2/index.php
。由于符号链接,此 URL 的行为将与我的原始网站完全相同http://example.com/index.php
。
现在假设我想检查 php 是否显示选择 2,我可以简单地检查变量$_SERVER['REQUEST_URI']
并查看它是否包含路径/sel2
。
此路径将在所有内部 URL 之间保持持久性,因为它们通常是相对的。