这种是当你输入用户名密码之后才让你访问网站(如管理员登录入口)。不像论坛的登录用户输入用户名和密码。这个是当你浏览器访问网站的时候,什么都不显示,直接跳出对话框输入用户名和密码。 需求当访问abc.com时,不让你直接访问,必须输入用户名密码对了才可访问。 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <Directory /data/wwwroot/www.123.com> //指定认证的目录 AllowOverride AuthConfig //这个相当于打开认证的开关 AuthName "123.com user auth" //自定义认证的名字,作用不大 AuthType Basic //认证的类型,一般为Basic,其他类型没用过 AuthUserFile /data/.htpasswd //指定密码文件所在位置 require valid-user //valid-user为密码文件定义用户。指定需要认证的用户为全部可用用户 </Directory> </VirtualHost> /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming //Apache自带工具生成文件 /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd lshx //第二次创建用户不需要-c

重新加载配置-t , graceful /usr/local/apache2.4/bin/apachectl -t

需要绑定hosts,浏览器测试

命令行测试 curl -x192.168.211.149:80 111.com //状态码为401。说明需要做用户认证 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>401 Unauthorized</title> </head><body>

命令行测试 curl -x127.0.0.1:80 -uaming:passwd www.123.com //状态码为200 curl -x127.0.0.1:80 -ulsx:1 111.com -I HTTP/1.1 200 OK

还可以针对单个文件进行认证。 有些内容不想让别人随便访问。 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <FilesMatch admin.php> //指定认证文件 AllowOverride AuthConfig AuthName "123.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch> </VirtualHost> 测试: curl -x127.0.0.1:80 111.com/123.php -I HTTP/1.1 401 Unauthorized