编辑:我有机会玩我的htaccess文件,我找出了我在下面附加的解决方案。长话短说,虽然它似乎工作,但我不会使用它。
原文:
你可以,如果你已经加入了REDIRECT_STATUS检查重定向尽量不要重定向:
RewriteEngine On
# redirect to landing page
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1 // my real IP would go here
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteCond %{REQUEST_URI} !/UpdatePage.html$ [NC] // stop infinite loops on itself
RewriteRule .* /UpdatePage.html [R=302,L]
从我明白这将意味着:重定向到UpdatePage.html如果远程地址是一个特定的IP地址,它以前没有被重定向过。
我无法检查这是否会导致所需的行为,但我确实从这个SO问题的答案中得到了这个结果:Clean URL Redirect Loop。
测试的解决方案:
我与我的WAMP的设置发挥各地与此想出了:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1 // my real IP would go here
RewriteCond %{REQUEST_URI} !/UpdatePage.html$ [NC] // stop infinite loops on itself
RewriteCond %{REQUEST_URI} ^(.+)\.html$ [NC] // Only handle html pages
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^(.+)\.html$ [NC] //don't redirect if the referer is a page. Should actually include the domain as well
RewriteRule .* /UpdatePage.html [R=302,L]
第一次在该网站的任何HTML页面应该重定向到UpdatePage则用户将点击该页面上的链接并转到原始页面。然后设置referer环境变量,您可以检查它是否有效,然后不重定向。
这不处理去网站的根。用户必须直接加载html页面。
我更喜欢你的解决方案(@james)。将逻辑编码到主要网关的顶部PHP页面更简单且不易出错,但我想我会尝试使用htaccess :-)来找到一种方法。请注意,我绝不会使用这个特定的htaccess方法。
嗯,我不确定mod_rewrite,但是当我做了一个更新页面,就像你在做什么的时候,我做了不同的事情。我删除了旧网站上的所有网页,并在index.html下创建了更新页面。然后我把404错误页面与htaccess作为index.html文件。 – Kranu 2010-08-08 23:21:17