我正在创建一个基于Drupal 7的新站点。
开发将在可公开访问的服务器上。我在多站点环境中工作。
我想完全禁止除授权用户之外的任何人对网站的访问。包括访问站点名称,主题等...
之前,我曾使用Secure Site执行类似任务。它进行了http级身份验证,并在身份验证失败时返回403。它没有D7版本。
最简单的方法是什么?
我正在创建一个基于Drupal 7的新站点。
开发将在可公开访问的服务器上。我在多站点环境中工作。
我想完全禁止除授权用户之外的任何人对网站的访问。包括访问站点名称,主题等...
之前,我曾使用Secure Site执行类似任务。它进行了http级身份验证,并在身份验证失败时返回403。它没有D7版本。
最简单的方法是什么?
Answers:
制作一个模块,并将以下代码粘贴到您的模块文件中:
<?php
/**
* Implementation of hook_boot().
*
* Ask for user credentials and try to authenticate.
*/
function foo_boot() {
require_once DRUPAL_ROOT . '/includes/password.inc';
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
$query = "SELECT pass FROM {users} WHERE name = :name";
$result = db_query($query, array(':name' => $_SERVER['PHP_AUTH_USER']));
$account = new stdClass();
foreach ($result as $row) {
$account->pass = $row->pass;
}
if (isset($account->pass)) {
if (user_check_password($_SERVER['PHP_AUTH_PW'], $account)) {
return;
}
}
}
header('WWW-Authenticate: Basic realm="Development"');
header('HTTP/1.0 401 Unauthorized');
exit;
}
这使用HTTP身份验证,并在Drupal数据库中检查有效的用户名和密码。
如果您对PHP CLI,Drush或cron有任何问题,可以在挂钩中添加以下代码:
// Allow cron through
if (basename($_SERVER['PHP_SELF']) == 'cron.php') {
return;
}
// Allow PHP CLI/Drush through
if (isset($_SERVER['argc'])) {
if (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)) {
return;
}
}
添加mod_auth
到apache设置。这取决于您的主机(Linux,Windows)。这可能涉及下载模块,可能涉及取消注释httpd.conf中的一行。
LoadModule auth_basic_module modules/mod_auth_basic.so
使用htpasswd
apache binaries文件夹中的命令创建.htpasswd文件
htpasswd -c user pass
<DIRECTORY>
在您的干净URL重写规则之后,立即将以下代码添加到您的语句中:
AuthType Basic
AuthName "My Auth"
AuthUserFile \path\to\.htpasswd
Require valid-user
重新启动Apache。利润。
.htaccess
drupal根目录中的文件吗?我不确定100%,但是您可以尝试将其放入其中。请注意,巴特的解决方案似乎好很多了:)
使用HTTP身份验证。http://httpd.apache.org/docs/2.2/howto/auth.html中记录了如何使用Apache完成此操作。对于多站点安装,<VirtualHost>的<Directory>部分将是放置配置指令的适当位置。
OP评论说这是在共享主机上。大多数共享主机都提供cPanel或其他控制面板,这些面板将对目录执行简单的.htaccess密码保护。
我已经使用这种方法保护了正在开发中的站点的顶级目录。如果使用cPanel保护目录,请查找“密码保护目录”菜单项。
如果在安装Drupal之前保护顶层目录,则cPanel会在该目录中创建一个.htaccess文件。使用Drupal提供的.htaccess文件在该文件的内容之前或之后添加内容。如果在安装Drupal之后保护目录,我可以肯定cPanel会将其所需的行添加到现有Drupal .htaccess文件中,而不会干扰文件的其余部分。如果在Drupal升级期间替换.htaccess文件,只需确保保留这些行即可。