如何使用htaccess重定向第一次访问者



如何使用基于referrer的htaccess将第一次用户重定向到特殊的着陆页面?我的意思是,如果他们来自另一个域名,那么他们是第一次访问者?

我对url重写真的很陌生,如果能解释一下就好了。

注意:登陆页面只是一个php脚本,可以检测浏览器。在那个页面上,我将使用cookie,但需要重定向用户,如果referrer是空的或它来自另一个域。

我建议:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^(www.)?(https?://)?example.com[NC] 
RewriteCond %{REQUEST_URI} !^/welcome.html [NC] 
Rewriterule ^(.*)$ http://example.com/welcome.html [r=307,L]

第一次RewriteCond检查referer是否包含您的域名,第二次检查您是否只是被rewriterrule重定向。rewriterrule以[L]ast规则的形式将您带到欢迎页面。

如果他的referer不是你的域名,如何重定向使用?

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^(www.)?(https?://)?(?!example.com) [NC]
Rewriterule ^(.*)$ http://example.com/welcome.html [r=307,NC]

这意味着如果用户在地址栏中写入example.com或来自另一个站点的链接,则用户将被重定向到welcome.html。一旦进入你的网站,如果他在你的网站上加载另一个页面,它就不会再被重定向了。

注:你可以在PHP中使用cookie生成一个纯html页面,见这里

编辑:

更新测试代码

请原谅我又把老牛排热了一遍。我仍然有兴趣知道是否有人知道这个问题的解决方案-不使用cookie或HTML5功能…

我在这里读到HTTP_REFERER可能是空白的。这就是为什么这种重定向方法不适合这个应用程序吗?我已经在我的服务器上进行了实验,但最接近的结果工作结果总是被重定向到我的着陆页index.htm,这是不希望的。

此规则是否会干扰其他重写规则?

同样,在前面的代码片段中有一个错误:

并且我认为后一个代码片段中的NC标志没有意义。不应该是L吗?

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^(www.)?(https?://)?example.com[NC] 
#missing space after .com and before [----------------here----^
RewriteCond %{REQUEST_URI} !^/welcome.html [NC] 
Rewriterule ^(.*)$ http://example.com/welcome.html [r=307,L]

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^(www.)?(https?://)?(?!example.com) [NC]
Rewriterule ^(.*)$ http://example.com/welcome.html [r=307,NC]
#Should this flag not be L? ------------------------------^

最新更新