很多时候你会需要对站点进行密码保护(典型的通过 HTTP Authentication),例如我在线构建一个客户开发环境,但不希望这个内容被搜索引擎收录。
当然你可以通过配置 Apache 来实现,但这里有个简单的方法,3 步实现:
- 改变 .htaccess,允许验证;
- 向 settings.php 添加个函数;
- 调用上述函数。
这个方法的好处就是简单,能基于项目单独配置。
步骤一: 向 .htaccess 添加以下代码(最后的 </IfModule> 前面)
# Password protection. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
步骤二: 向 settings.php 添加函数
/** * Password protect the site with a single function. */ function secure_the_site_please($username = 'monkey', $password = 'monkey', $message = 'This site is protected') { // Password protect this site but ignore drush and other command-line // environments. if (php_sapi_name() != 'cli') { // PHP-cgi fix. $a = base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)); if ((strlen($a) == 0) || (strcasecmp($a, ":") == 0)) { header('WWW-Authenticate: Basic realm="Private"'); header('HTTP/1.0 401 Unauthorized'); } else { list($entered_username, $entered_password) = explode(':', $a); $_SERVER['PHP_AUTH_USER'] = $entered_username; $_SERVER['PHP_AUTH_PW'] = $entered_password; } if (!(isset($_SERVER['PHP_AUTH_USER']) && ($_SERVER['PHP_AUTH_USER'] == $username && $_SERVER['PHP_AUTH_PW'] == $password))) { header('WWW-Authenticate: Basic realm="' . $message . '"'); header('HTTP/1.0 401 Unauthorized'); // Fallback message when the user presses cancel / escape. echo 'Access denied'; exit; } } }
步骤三:在 settings.php 内执行上述函数,设置口令。
secure_the_site_please('test', 'test');