使用 mod_rewrite 在进入网站时强制用户进入主页?

使用 mod_rewrite 在进入网站时强制用户进入主页?

是否可以使用 mod_rewrite 强制所有进入站点的用户(通过其他站点的链接或在地址栏中输入 URL)重定向到主页?从主页(或站点内的任何页面),用户应该能够访问站点中的其他页面。但所有用户都将被强制通过主页进入站点。可以使用 mod_rewrite 来实现(或不使用脚本语言)吗?

答案1

当然,也有一些缺点。简单版本如下所示:

RewriteCond %{HTTP_REFERER} !example.com
RewriteRule ^/. / [R]

这将检查引荐来源不包含您的域名,然后对于在第一个斜杠后包含内容的任何 URI(即,除主页之外的任何页面),将用户重定向到主页。

对于不发送引荐来源或修改引荐来源的用户,这将彻底破坏您的网站。例如,某些隐私应用程序会将引荐来源更改为shttp://xxxxxxxxxxxxxxxxxxxxxxx的数量x与原始真实引荐来源的长度相匹配。

如果您发送的电子邮件中包含从您的网站热链接的图像,则上述规则也会违反。

对于点击其他网站(如 Google)特定页面链接的访问者来说,这也会带来糟糕的可用性。然后他们会被重定向到主页,不知道如何返回到他们之前所在的页面。这些访问者很可能会点击后退按钮并选择不同的搜索结果。您可以通过更改重写规则来改善这种情况。

RewriteCond %{HTTP_REFERER} !example.com
RewriteRule ^(/.+) /?prev=$1 [R]

然后,您可以在主页上使用您的应用提供返回他们所在页面的链接。您还可以使用 mod_rewrite 设置 cookie,以便?prev=$1将其存在于 cookie 中。

可能还有其他我未曾预见到的可用性缺陷。如果你实施了这一点,你应该密切关注你的访客。

我刚刚想到了另一个缺点:机器人很少发送引荐来源。如果您按书面方式实施此操作,并且不维护所需机器人的完整列表(用户代理和/或 IP 范围)并为其禁用它,那么您的网站将无法被搜索引擎机器人抓取。

答案2

您可以使用 PHP:

我首先想到的是使用“$_SERVER['HTTP_REFERER']”,但是,据我所知,无论是否显示,用户都可以在客户端禁用此功能,如果我错了,请纠正我。因此,您可以执行类似伪代码的操作:

if $myDomain is part of $_SERVER['HTTP_REFERER'] then
redirect
else
do nothing

由于人们可以改变这一点,你可以在 PHP 中引入一个会话变量。伪代码:

if empty( $_SESSION['newvisitor'] ) && !isset($_SESSION['newvisitor']) 
{
    $_SESSION['newvisitor'] = true;
}
else
{
   $_SESSION['newvisitor'] = false
}

if ( $_SESSION['newvisitor'] )
{
    #redirect to home
}

因此,脚本首先会检查变量是否已设置,如果未设置,则一定是新访问者,因此应该重定向到主页。如果确实设置了主页,则不应重定向。

编辑:认识到,我的第一个解决方案是错误的,因为如果他实际上来自子页面,它就无法匹配。

相关内容