如何使用基于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? ------------------------------^