【问题标题】:Site in maintenance. How to redirect visitors?维护中的站点。如何重定向访客?
【发布时间】:2023-03-22 08:25:01
【问题描述】:

我的 PHP 站点正在维护中。如何将访问者重定向到“维护中的站点”单页?

我听说了一些关于 ASP.NET 的 app_offline.htm

PHP 有类似的东西吗?

  • 我希望将“mysite.com”中的每个页面都重定向到“maintenance.php”;
  • 我不想对现有网站页面进行最小的修改,最好不要。

Linux下的Apache版本2.2.15
PHP版本5.2.13

【问题讨论】:

  • 制作一个自定义维护页面或只写“维护中的站点”并使用标题位置重定向所有用户在 php.net 上查找它
  • php 5.* 有点模棱两可:5.2 与 5.3.. 大不相同。
  • oricum,问题更多地与 Apache 相关,而不是与 PHP 相关

标签: php apache redirect maintenance


【解决方案1】:

作为我在 Linux 下的 Apache,我执行以下操作:

在站点根目录下创建“.htaccess”文件,内容如下:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_URI} !/images/mainetnance.png$
RewriteCond %{REQUEST_URI} !/maintenance.php$

# here filter the developer's IP/
#RewriteCond %{REMOTE_HOST} !^888\.888\.888\.888

RewriteRule $ /maintenance.php [R=302,L]

要说明的是我添加了过滤 .png 文件,因为我使用了一个图像 (/images/mainetnance.png) 作为maintenance.php,并且由于全局重定向,该图像应该保持可见。

【讨论】:

    【解决方案2】:

    您确实没有提供足够的详细信息(服务器、框架等)。如果您使用的是 Apache,请添加到您的 .htaccess:

    # prevent infinite redirect loops
    RewriteCond %{REQUEST_URI} !^/back-soon-updating.php$
    # not on development server
    RewriteCond %{HTTP_HOST} .com$
    # let admins enter to verify the update has worked
    RewriteCond %{QUERY_STRING} !c=u
    RewriteRule .* back-soon-updating.php [L,R=307]
    

    【讨论】:

    • 我上次检查时,URL 重写在 Windows 上不起作用 - 您可能需要注意
    • 什么意思?我可以在 windows 上使用 mod_rewrite 就好了。
    • 真的吗?正如我所说 - 上次我检查它根本不起作用
    • 我有 Apache 和 PHP,请参阅编辑中的详细信息。我设置了“maintenance.html”而不是“back-soon-updating.php”。对网站的任何更改。
    • @serhio:您可能还想将301(永久重定向)更改为307(临时重定向)。否则访问者会将他们的书签更新为maintenance.html,搜索引擎会认为其他页面不再存在,而实际上您只是在更新您网站的内容。
    【解决方案3】:

    您还应该在响应中设置正确的标头(HTTP 响应代码 503)。使用 mod_rewritemod_headers 有 Apache 唯一的方法

    但是对于不需要mod_headers 的简单解决方案,请按照以下步骤操作

    • 使用 Coronatus 提到的 apache conf / .htaccess 将除开发人员之外的所有用户重定向到 PHP 维护脚本。确保重定向确实是临时的(使用 Zach 提到的 307 重定向代码)
    • 在您的 PHP 脚本中,将响应标头设置为在脚本的最开头跟随。

    header('HTTP/1.1 503 Service Temporarily Unavailable') //send the proper response code

    header('Retry-After: 3600') //Retry after an hour

    这应该可以得到你想要的。

    【讨论】:

    • 1.它适用于您的本地安装吗? 2. .htaccess 在你的 linux 主机上启用了吗?
    【解决方案4】:

    没有“全局方式”,要么您必须配置您的网络服务器,才能访问特定站点,或者如果您在任何地方都包含一个页面,请添加

    header("Location: offline.php");
    die();
    

    临时重定向您的用户。

    【讨论】:

    • 我应该在我的所有网页中添加这个吗?维护完成后,我应该从所有现有页面中删除此代码吗?
    • 是的,稍后简化“删除”的另一种方法是执行 并在那里执行 header("Location: offline. php");死();这样,您只需从 header.php 中删除重定向。而且您不会冒险在任何被遗忘的页面上保留重定向。
    【解决方案5】:

    PHP 方式:创建一个maintainance.php 并将其添加到您的index.php 中:

    $offline = true; // <== change this to false when you go online again.
    
    if($offline){
      header("Location: maintainance.php");  // <== redirects all to maintainance.php
      exit;
    }
    

    【讨论】:

    • 我应该在我的所有网页中添加这个吗?维护完成后,我应该从所有现有页面中删除此代码吗?
    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多