基于.htaccess的身份认证子目录
作者: Nayyar Ahmad
联系人: nayyares * AT * gmail * DOT * com
主页: www.cbtcandy.org
奉献: 对于 Baji , 为了所有这些努力,她为我做了。
前言:
.htaccess用于提供每个目录基础更改配置的功能,该文件可以包含要在包含.htaccess文件的目录上强制执行的一个或多个指令。
.htaccess
是此配置修改文件的受欢迎名称,可以通过更改Apache配置文件中的AccessFileName
参数来更改此默认名称。 即
AccessFileName .anyname
在这个howto中,我将采取两个并行级别子目录的虚拟场景,并将对它们两者执行密码验证。 这意味着只有那些用户可以访问这些具有正确用户名和密码的目录。
所以开始:)
在这里,我假设您的DocumentRoot目录是/ var / www / html,
但是如果您有VirtualHost配置,甚至在其他根目录上配置了Apache,则可以根据您的情况进行调整。
注意:我将为这些目录获取两个虚拟名称作为test-dir1
和test-dir2
。
1创建目录:
$ cd /var/www/html
$ mkdir test-dir1
$ mkdir test-dir2
2测试HTML文件创建:
在第一个目录中创建html文件。
$ cd /var/www/html/test-dir1
$ cat > index.htm
<html> <head> TEST PAGE IN TEST-DIR1. </head> </html> |
在第二个目录中创建html文件。
$ cd /var/ www/html/test-dir2
$ cat > index.htm
<html> <head> TEST PAGE IN TEST-DIR2.</head> </html> |
3浏览测试页:
现在您可以浏览和测试,无论页面是否可用,通过打开任何Web浏览器,我喜欢Firefox(因为它摇滚:))并键入:
http:// localhost / test-dir1 /
这将显示第一个目录测试页面,和
http:// localhost / test-dir2 /
将在test-dir2
中显示第二个测试页。
如果你能看到这两个页面,这意味着你几乎要摇滚.htaccess。
4 .htaccess文件创建:
$ cd /var/www/html/test-dir1
$ vi .htaccess
将以下行写入此文件:
AuthName "Authorized Users Only." AuthType Basic AuthUserFile /etc/httpd/conf/.htpasswd require user testusr |
现在我将解释一下,我们在这个文件中写了什么魔术线:
AuthName
参数仅在用户登录时定义密码输入框的标题,而AuthType
告诉服务器正在使用哪种处理方式,而Basic
几乎是任何目的都是最常见的,完全足够的。 AuthUserFile
用于定义.htpasswd
文件的位置,此文件包含用户将在.htaccess
文件中进行身份验证的密码
。 要求用户
用于识别受信任的用户,如果有多个受信任的用户,则可以在空格列表中指定其名称。
现在要使test-dir2
受到.htaccess的保护
,我们需要将它从test-dir1
复制到test-dir2
使用以下命令:
$ cp /var/www/html/test-dir1/.htaccess /var/www/html/test-dir2/
5用户创建:
这里我们将创建一个测试用户来检查我们的.htaccess
:)
$ adduser testusr
$ passwd testusr
6告诉Apache关于用户:
现在我们必须通知Apache关于用户及其密码,但是在进入这一步之前,我有一个社会责任,即解释RPM和源Apache安装差异。 :)如果您从RPM安装了Apache,那么它将在/ usr / local / bin
中安装所有相关的命令,所以没有问题,可以在系统的任何地方给出htpasswd
命令,但是如果从源代码安装过Apache,找到Apache bin目录来执行htpasswd
命令。 在这个HowTo我会给两种方式,这里是:
$ htpasswd -c /etc/httpd/conf/.htpasswd testusr
如果您的/ usr / local / bin中
有htpasswd
,则如果从RPM安装Apache,则上述命令将会起作用。 /etc/httpd/conf/.htpasswd
是将包含经过身份验证/受信任用户密码的文件的位置。
要么
$ cd /apache/bin/
$ ./htpasswd -c /etc/httpd/conf/.htpasswd testusr
如果您从源代码中安装了Apache,则上述命令将正确, $ cd / apache / bin
可以根据您的系统进行调整,也许您已经安装在其他地方。
7 .htpasswd文件权限:
我们需要设置.htpasswd
文件的文件权限,并使apache
用户成为该文件的所有者。
$ chown apache.apache /etc/httpd/conf/.htpasswd
8编辑httpd.conf:
现在我们必须编辑httpd.conf
,因为Apache需要被通知.htaccess
,这里我们将更改AllowOverride All |
没有
Authconfig
,现在有两种情况,一种如果你正在托管一个网站和其他如果你有VirtualHost,这里是第一种情况:
在这种情况下,我们在httpd.conf
文件中只有一个Directory
标签,因为我们只托管一个站点,所以我们将编辑/ var / www / html
的<Directory>
标签。
<Directory "/var/www/html"> AllowOverride AuthConfig Order allow,deny Allow from all </Directory> |
现在第二种情况,当我们有几个站点托管,即VirtualHost:
<VirtualHost www.cbtcandy.org> DocumentRoot /var/www/html/cbtcandy ServerName www.cbtcandy.org <Directory /var/www/html/cbtcany> AllowOverride AuthConfig Order allow,deny Allow from all Options -Indexes </Directory> </VirtualHost> |
9重新启动Apache:
现在,您必须重新启动Apache服务器才能重新加载配置。
对于基于RPM的系统:
$ service httpd restart
对于基于源的系统,调整Apache的bin目录路径。
$ /apache/bin/apachectl restart
10测试:
现在一切都准备好测试,再次打开你最喜欢的浏览器,并尝试打开以下链接:
http:// localhost / test-dir1 /
和
http:// localhost / test-dir2 /
注意: 当您浏览这些链接时,您将被要求输入用户名和密码,一旦您提供它们将带您进入测试页面。 但一旦您登录到一个目录,则不需要另一个测试目录的用户名和密码,因为Apache不会一次又一次地询问用户名和密码,以达到等级或子目录中的目录。 所以一旦你通过身份验证,孩子和并行目录就可以使用了。 但是,如果您仍然要检查它们,那么使用 链接
文本浏览器,这是我检查它们。