Php 如何实施";“维护模式”;在已经建立的网站上

Php 如何实施";“维护模式”;在已经建立的网站上,php,.htaccess,redirect,include,maintenance-mode,Php,.htaccess,Redirect,Include,Maintenance Mode,我已经建立了一个超过60页的网站(PHP)。我现在才意识到(不幸的是)我应该内置一个“维护模式”功能,允许管理员临时禁用网站并将其指向维护模式页面。这将只允许那些以管理员身份登录的用户查看网站 我看到的选择是: 在每个PHP页面的顶部添加一个新的“include”文件 我有一个用于在 每个页面(导航类)。我可以编写维护模式 这个类中的代码 我还有其他选择吗?第一个选项似乎不是最有效的,而第二个选项似乎是糟糕的编程。有没有其他更好的方法在每个php文件中包含一个新文件 谢谢 ps-网站尚未启动在维

我已经建立了一个超过60页的网站(PHP)。我现在才意识到(不幸的是)我应该内置一个“维护模式”功能,允许管理员临时禁用网站并将其指向维护模式页面。这将只允许那些以管理员身份登录的用户查看网站

我看到的选择是:

  • 在每个PHP页面的顶部添加一个新的“include”文件

  • 我有一个用于在
    每个页面(导航类)。我可以编写维护模式
    这个类中的代码

  • 我还有其他选择吗?第一个选项似乎不是最有效的,而第二个选项似乎是糟糕的编程。有没有其他更好的方法在每个php文件中包含一个新文件

    谢谢


    ps-网站尚未启动

    在维护模式下,您可以使用
    .htaccess
    重定向到其他页面

    三个不同的例子:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
    RewriteCond %{REQUEST_URI} !^/maintenance\.html$
    RewriteRule ^(.*)$ http://domain.com/maintenance.html [R=307,L]
    


    最简单的方法是集中一些有关站点生成的逻辑。通过这种方式,您可以打开维护模式,并将任何非管理员重定向到其他页面。这并不难做到,因为我想象你有一些代码不断出现,所以只要扩展登录功能来检查全局变量(如果你的页面上没有任何通用的全局变量,你可以通过setenv将其设置为.htaccess)。

    string

    指定在主文件之前自动分析的文件的名称。包含该文件就像使用require()函数调用它一样,因此使用include_path

    特殊值“无”将禁用自动预结束

    您可以在php.ini、apache(虚拟)主机文件或.htaccess中使用php_flag auto_prepend_file.php设置此项

    [或php_管理_标志(?)]

    编辑

    • 也许您不应该将include文件放在web根目录或子文件夹中
    • 记得打电话退出,否则就死定了

    我知道这是一个老问题,但我添加这个问题是为了将来通过搜索看到此页面的搜索者

    我使用PHP重定向

    在每页的顶部添加以下行:

    <?php
    include('PATH/TO/FILE/config.php');
    if(maintenance == 1) {
    header('Location: http://example.com/maintenance.php');
    }
    else {
    // do nothing
    }
    ?>
    
    当你希望你的站点处于维护模式时,只需将“0”改为“1”。 这会将所有站点访问者重定向到维护页面


    我在没有测试的情况下很快地输入了代码,但它应该可以工作。

    您也可以在重写后检查HTTP\u用户\u代理,而不是指定IP地址

    RewriteCond %{HTTP_USER_AGENT} !MyCrazyString
    RewriteCond %{THE_REQUEST} !upgrade\.txt
    RewriteRule .* /upgrade.txt [R=307,L]
    
    任何将“MyCrazyString”标记在浏览器用户代理字符串末尾的人都可以访问,其他人都可以访问维护模式页面/站点

    只要不需要高安全性,它就是理想的;快速方便地分发给管理员,完全可移植,而且重要的是,当世界另一端唯一一个真正可以访问服务器的人睡着时,如果重新连接DSL,就不会中断

    );o) 我认为,你比我更容易理解

    在维护之前,我将文件重命名为/home/coolcmd/site\u maintenance\u off,改为/home/coolcmd/site\u maintenance\u on

    /.htaccess的代码段:

    # If file, directory or symlink /home/coolcmd/site_maintenance_on exists,
    # and requested file is not /maintenance.html,
    # and not an admin's IP...
    <If "-e '/home/coolcmd/site_maintenance_on' && %{REQUEST_URI} != '/maintenance.html' && %{REMOTE_ADDR} != '111.111.111.111'">
    # Generate status code 503 for URL beginning with /, in other words for ANY URL.
    # This is not "the real redirection 3xx".
    Redirect 503 "/"
    # This page handles status code 503. All external resources used by page
    # (for example, maintenance.css), if any, must be added to <if> above.
    ErrorDocument 503 /maintenance.html
    # Maintenance probably will end in 10 minutes.
    Header set Retry-After 600
    </If>
    
    #如果存在文件、目录或符号链接/home/coolcmd/site_maintenance_,
    #并且请求的文件不是/maintenance.html,
    #而不是管理员的IP。。。
    #为以/开头的URL生成状态代码503,换句话说,为任何URL生成状态代码503。
    #这不是“真正的重定向3xx”。
    重定向503“/”
    #此页面处理状态代码503。页面使用的所有外部资源
    #(例如,maintenance.css),如果有的话,必须添加到上面。
    错误文档503/maintenance.html
    #维修工作可能在10分钟后结束。
    标头集在600之后重试
    
    正如您在示例中看到的,您可以排除一些IP。这看起来是一个很好的快速替代方案。我希望找到其他更具可扩展性的方法,这样每次我有一个新管理员时,我就不必更新.htaccess文件并输入他们的IP。也许我有点超前了?明年我可能不会有很多新的管理员。也许现在实现一个简单的quick.htaccess修复程序会一直有效,直到我真正需要实现这个健壮的方法为止。你们觉得怎么样?现在用“适当”的方式建造它更好吗?或者只是简单地做,直到我需要把它变得更复杂?在所有的选择中,我认为这是最好的方向。它为您提供了最大的灵活性和站点范围的控制。在我真的需要构建复杂的东西之前,这听起来是目前最好的解决方案,考虑到这只需要几分钟的时间。顺便说一下,如果其他人使用这种方法,您需要在.htaccess文件中添加一行以允许任何外部css文件。要允许所有css文件使用此选项:%{REQUEST_URI}!。css$,您可以添加
    exit在结尾的某个地方,以阻止其他代码被解析。@alex:是的。不要以为人们知道退出只是因为他们有60多页的php:是的,谢谢。创建大量文件很容易,但却不知道自己在做什么:PThanks OIS用于共享auto_prepend_文件。我不知道这一点,我相信它以后会有用的。:)好吧,这行不通,你的头上缺少一个撇号。除此之外,我也考虑过同样的想法,但对于大型站点来说,htaccess看起来更好。请记住,清除与config.php相关的所有字节码,为什么不在配置文件中放置头(“..”)呢?
    
    $maintenance = 0; // turns maintenance mode off
    
    RewriteCond %{HTTP_USER_AGENT} !MyCrazyString
    RewriteCond %{THE_REQUEST} !upgrade\.txt
    RewriteRule .* /upgrade.txt [R=307,L]
    
    # If file, directory or symlink /home/coolcmd/site_maintenance_on exists,
    # and requested file is not /maintenance.html,
    # and not an admin's IP...
    <If "-e '/home/coolcmd/site_maintenance_on' && %{REQUEST_URI} != '/maintenance.html' && %{REMOTE_ADDR} != '111.111.111.111'">
    # Generate status code 503 for URL beginning with /, in other words for ANY URL.
    # This is not "the real redirection 3xx".
    Redirect 503 "/"
    # This page handles status code 503. All external resources used by page
    # (for example, maintenance.css), if any, must be added to <if> above.
    ErrorDocument 503 /maintenance.html
    # Maintenance probably will end in 10 minutes.
    Header set Retry-After 600
    </If>