代码之家  ›  专栏  ›  技术社区  ›  James

显示一次更新页

  •  1
  • James  · 技术社区  · 14 年前

    我正在开发一个新的网站与我现有的网站仍在运行中。我想做的是重定向用户到一个更新页面,当他们访问现有的网站(无论他们在什么页面上输入),然后重定向他们从该更新页面到他们要求的原始页面。

    我认为modu重写规则看起来像

    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]
    

    我想我需要某种形式的旗帜?我真的不是太有经验的修改是这样的东西可能吗?或者这是纯PHP在Mod\u Rewrite之外可以实现的吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

    编辑:我有机会玩我的htaccess文件,我确实想出了一个解决方案,我已经附加在下面。长话短说,虽然它似乎有用,但我不会用它。

    原件:

    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地址,它以前没有被重定向。

    我无法确定这是否会导致期望的行为,但我确实从这个问题的答案中得到了答案: 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方法。

        2
  •  1
  •   James    14 年前

    由于当前站点的实现方式(所有内容都通过index.php页面),我可以简单地使用一些会话变量来检测是否应该将用户重定向到更新页面。

    <?php
    
    if (!isset($_SESSION['ShowUpdatePage']) || $_SESSION['ShowUpdatePage'] == "true")
    {
        $_SESSION['ShowUpdatePage'] = "false";
        header("Location: UpdatePage.html");
    }
    
    ?>
    

        3
  •  0
  •   Evert    14 年前

    真实站点:www.example.org 旧网站:old.example.org

    “新”域需要提前准备好。当你切换网站时,你可以把所有访问旧网站的人重定向到new.example.org。有一段时间你的用户会有'不正确'的域。几天后,您可以将“new.”重定向到“www.”。