Codeigniter 2和.htaccess - 如何实现“down for maintenance”模式?

时间:2012-05-06 16:01:01

标签: apache .htaccess codeigniter mod-rewrite

我知道这个问题可能已经被问了几次,但是我需要一个针对CodeIgniter的特定解决方案,使用.htaccess文件将每个请求发送到index_failsafe.php文件而不是普通的index.php但仅限于如果网址不以'admin'开头。例如:

  1. www.myhost.com/admin - >像往常一样工作
  2. www.myhost.com/welcome - >发送到failafe页面
  3. 案例1:

    RewriteRule ^.*$ index.php/$1 [L] 
    

    案例2:

    RewriteRule ^.*$ index_failsafe.php/$1 [L] 
    

    我的重写条件是:

       RewriteEngine On
    
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
    

    是否可以这样做?

2 个答案:

答案 0 :(得分:11)

就我个人而言,我是通过IP实现的 - 所以我可以让我的网站脱机,但我仍然可以完全访问它(测试新功能并确保它在恢复之前正常工作)

RewriteEngine on

    # For maintenance:
    # If your IP address is 1.1.1.1 - then dont re-write
    RewriteCond %{REMOTE_ADDR} !^1\.1\.1\.1
    # If the person is requesting the maintenance page, also dont rewrite (prevent loops)
    RewriteCond %{REQUEST_URI} !/maintenance.html$ 
    # Otherwise rewrite all requests to the maintenance page
    RewriteRule $ /maintenance.html [R=302,L]


    # do not rewrite links to the documentation, assets and public files
    RewriteCond $1 !^(assets)

    # do not rewrite for php files in the document root, robots.txt or the maintenance page
    RewriteCond $1 !^([^\..]+\.php|robots\.txt|maintenance\.html)

    # but rewrite everything else
    RewriteRule ^(.*)$ index.php/$1 [L]

只需更改!^ 1.1.1.1到您当前的IP。即!^ 121.65.56.65

如果您不确定您的IP是什么 - 只需谷歌“我的IP是什么” - 它将显示为第一次点击

但就你的具体问题而言 - 这应该有效:

RewriteCond %{REQUEST_URI} !/admin$ 
RewriteRule $ /index_failsafe.php [R=302,L]

编辑:

答案 1 :(得分:1)

如果您使用cookie来存储用户的会话数据,那么更改cookie名称以强制每个人注销可能更为简单,然后更改登录页面控制器以加载“关闭以进行维护”或其他任何内容的视图。

当你完成后,只需将cookie名称更改回原来的状态,每个人仍然会登录,并确保更改登录页面控制器加载的视图,以便用户可以正常登录。

要更改CI的会话cookie,请打开config.php并更改以下值:

    $config['sess_cookie_name']

您可以通过创建备用登录控制器并查看标题为“维护登录”或类似内容的方式更进一步,然后您仍然可以登录进行测试。

这是我在需要将saas用于维护时使用的方法,并且效果很好。我们面向公众的销售页面不受影响,我不必惹恼htaccess。