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

是否有可能使用mod_rewrite强制所有用户进入一个网站(通过从另一个网站的链接,或通过在地址栏中键入一个url)被redirect到主页? 从主页(或站点内的任何页面),用户应该能够访问站点中的其他页面。 但所有的用户将被迫通过主页进入该网站。 这可以用mod_rewrite(或不使用脚本语言)完成吗?

当然,有一些可能的缺点。 简单的版本是这样的:

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

这将检查引用者是否不包含您的域名,然后针对在第一个斜杠之后有任何URI的任何URI(即除主页以外的任何页面)将用户redirect发送到主页。

这将彻底打破您的网站的任何用户不发送引用或修改引用。 例如,一些隐私应用程序将引用者更改为http://xxxxxxxxxxxxxxxxxxxxxxx ,其中x的数量与原始的真正引用者的长度相匹配。

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

访问者点击链接到另一个网站(如Google)的特定页面的可用性也很差。 然后他们被redirect到主页,不知道如何回到他们所在的页面。 这些访问者可能会点击后退button并select不同的search结果。 你可以通过改变重写规则来改善这一点。

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

然后,您可以在主页上使用您的应用程序提供一个链接回到他们所在的页面。 您也可以使用mod_rewrite设置cookie,以便?prev=$1可以存在于cookie中。

可能还有其他可用性缺陷,我没有预见到。 如果你实现这个,你应该密切关注你的访问者。

我只是想到另一个缺点:机器人很less发送推荐人。 如果您以书面forms实施此操作,并且不保留所需机器人(用户代理和/或IP范围)的完整列表并将其禁用,那么您的网站将无法被search引擎机器人抓取。

你可以使用PHP:

首先,我想到的是使用“$ _SERVER ['HTTP_REFERER']”,但是,这可以由客户端的用户禁用,如果显示或不是我所关心的,请纠正我我错了。 所以你可以做一些伪代码:

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

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

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

所以基本上,脚本一开始就检查variables是否设置好,如果没有设置,就必须是新的访问者,因此应该redirect到主页。 如果这是实际设置,那么它不应该redirect。

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