我正在开发一个新网站,我的现有网站仍然正常运行。我想要做的是当用户访问现有网站时将用户重定向到更新页面(无论他们输入什么页面),然后将他们从该更新页面重定向到他们请求的原始页面。
我认为mod_rewrite规则看起来像
RewriteEngine On
# redirect to landing page
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1 // my real IP would go here
RewriteCond %{REQUEST_URI} !/UpdatePage.html$ [NC] // stop infinite loops on itself
RewriteRule .* /UpdatePage.html [R=302,L]
因此,上述内容将实现将用户从任何页面重定向到更新页面。然而,显然这里的问题是它将导致持续的循环...
我想我在这里需要某种形式的旗帜?我对Mod_Rewrite的经验不是很有经验吗?或者这是可以用纯PHP在Mod_Rewrite之外实现的东西吗?
答案 0 :(得分:2)
编辑:我有机会玩我的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]
根据我的理解,这意味着:如果远程地址是某个IP地址并且之前没有被重定向,则重定向到UpdatePage.html。
我无法检查这是否会导致所需的行为,但我确实从这个问题的答案中得到了这个: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方法。
答案 1 :(得分:1)
由于当前站点的实现方式(一切都通过index.php页面)我能够简单地使用一些会话变量来检测是否应该将用户重定向到更新页面,例如
<?php
if (!isset($_SESSION['ShowUpdatePage']) || $_SESSION['ShowUpdatePage'] == "true")
{
$_SESSION['ShowUpdatePage'] = "false";
header("Location: UpdatePage.html");
}
?>
这也意味着每次会话只能重定向一次,这正是我所寻找的。 p>
答案 2 :(得分:0)
在我看来,这是最好的方法:
真实网站:www.example.org 旧网站:old.example.org 新网站:new.example.org
'新'。域名需要事先准备就绪。当你切换网站时,你可以将每个点击旧网站的人重定向到new.example.org。有一段时间,您的用户将拥有“不正确”的域名。几天后,您可以重定向“新”。到“www。”。