1

我知道这个问题可能已经被问过几次了,但我需要一个针对 CodeIgniter 的特定解决方案,使用 .htaccess 文件将每个请求发送到 index_failsafe.php 文件而不是普通的 index.php 但只有在 url不以“管理员”开头。例子:

  1. www.myhost.com/admin -> 照常工作
  2. www.myhost.com/welcome -> 发送到故障安全页面

情况 1:

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

情况2:

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

我的重写条件是:

   RewriteEngine On

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

是否有可能做到这一点?

4

2 回答 2

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]

编辑:

于 2012-05-06T17:07:39.197 回答
1

如果您使用 cookie 为用户存储会话数据,那么更改 cookie 名称以强制所有人注销可能会更简单,然后更改登录页面控制器以加载显示“停机维护”或其他内容的视图。

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

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

    $config['sess_cookie_name']

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

这是我需要将 saas 停机进行维护时使用的方法,效果很好。我们面向公众的销售页面不受影响,我也不必乱用 htaccess。

于 2014-03-05T17:53:00.920 回答