allowoverride 为什么当AllowOverride All时Apache出错
其实allowoverride的问题并不复杂,但是又很多的朋友都不太了解为什么当AllowOverride All时Apache出错,因此呢,今天小编就来为大家分享allowoverride的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
如何添加Apache服务器用户验证AllowOverride AuthConfig
apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。
通常分为以下三步:
1、在apache的配置文件httpd.conf中声明要进行验证的目录
2、在要进行验证的目录中创建.htaccess文件,在此文件中指明用于验证的文件存放的位置
3、根据.htaccess指明的位置,用apache自带的htpasswd命令创建用于验证的文件
步骤说明:
假设要对/home/ddd这个目录进行访问控制。(这个目录不在APACHE的主目录中,因此要用alias添加为虚拟目录)
1、在apache的配置文件httpd.conf中声明要进行验证的目录
编辑httpd.conf
LoadModule auth_module modules/mod_auth.so#需要加载此模块进行认证
Alias/test"/home/ddd"#添加为虚拟目录
Options Indexes MultiViews
AllowOverride All#允许用.htaccess文件中指定的验证文件进行身份验证
Order allow,deny
Allow from all
#AllowOverride all表示进行身份验证这是关键的设置
此外,也可用AllowOverride AuthConfig
实例:
ServerName test.xxx.com
ServerAlias xxx.com 123.123.123.123
DocumentRoot/data/ddd/
Options Indexes FollowSymlinks MultiViews
AllowOverride All
ErrorLog/error.log
2、在要进行验证的目录中创建.htaccess文件,在此文件中指明用于验证的文件存放的位置
在/home/ddd下创建.htaccess文件
vi/home/ddd/.htaccess,内容如下:
AuthName"请输入用户名及口令"
AuthType Basic
AuthUserFile/home/.htpasswd
require valid-user
#AuthName描述,出现在验证对话框标题栏中
#AuthUserFile/home/.htpasswd(指定验证文件存放于/home中,文件名为.htpasswd,此文件具有隐含属性,其中包括允许访问的用户名及密码。
#require valid-user使用验证文件中的有效用户进行验证
也可使用 require user<用户>来指定特定用户进行验证
#密码文件推荐取名为.htpasswd,因为apache默认系统对“.ht”开头的文件默认不允许外部读取,安全系数会高一些。
3、根据.htaccess指明的位置,用apache自带的htpasswd命令创建用于验证的文件
由于已经在第2步中指定验证文件为/home/.htpasswd文件,所以下面创建这个文件
htpasswd-c/home/.htpasswd jp#创建.htpasswd文件,并添加用户jp,会要求输入口令
htpasswd/home/.htpasswd test#.htpasswd文件中添加第二个用户:test)
也可以不通过交互方式,直接在命令行,将口令添加到.htpasswd文件中
htpasswd-bc/home/.htpasswd jp 111(创建.htpasswd文件,并添加用户jp,密码为111)
htpasswd-b/home/.htpasswd test 222(.htpasswd文件中添加第二个用户:test密码为222)
#第一次创建用户要用到-c参数第2次添加用户,就不用-c参数,因为已经有.htpasswd文件,就不用再创建了。-b表示从命令行直接获取参数值,添加到验证文件.htpasswd中
如果想修改密码,可以用如下命令:
htpasswd-m.htpasswd jp
对存放于.htpasswd文件中的用户jp进行口令更改
如何使用 Rewrite 功能
一、Ubuntu默认未开启Rewrite支持
apche模块加载工作已分散到不同的配置文件,这样看起来似乎更为合理,管理起来也非常方便。下面看一下如何开启Rewrite模块,当用户需使用301重定向、伪静态等Rewrite功能时,一般都习惯于使用.htaccess文件配置,比如下面的301重定向:
Options+FollowSymLinks
RewriteEngine on
RewriteCond%{HTTP_HOST} ^abc.com [NC]
RewriteRule ^(.*)$ http://www.abc.com/$1 [L,R=301]
配置完成后,使用/etc/init.d/apache2 reload命令加载生效,这时,如果未开启Rewrite功能,则会出现500错误(浏览器显示),查看LOG错误如下:
[Sun Jan 30 02:41:29 2011] [alert] [client 12.34.56.78]/srv/www/abc.com/public_html/.htaccess: Invalid command'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
说明需要开启Rewrite模块加载,加载开启过程如下。
二、手动开启加载Rewrite
1、使用终端工具连接服务器,输入管理员帐号和密码
2、执行加载Rewrite模块:
a2enmod rewrite
执行后,会提示OK和重启Apache命令(/etc/init.d/apache2 restart)。
3、参照上文的目录配置,做个启动链接(下次启动自动加载):
ln-s/etc/apache2/mods-available/rewrite.load/etc/apache2/mods-enabled/rewrite.load
执行后会在mods-available目录下创建一个快捷方式,连接到mods-enabled下rewrite模块。
4、重启apache:
/etc/init.d/apache2 restart
注意:如果使用的是apache默认网站目录(一般是类似于/var/www文件夹),没有创建单独的自己配置文件,可能还需要修改/etc/apache2/sites-available/default这个文件,把其中的AllowOverride None修改为AllowOverride All,因为default配置里还默认关闭.htaccess重载,打开后.htaccess才会生效。
三、如何判断Rewrite已经开启
1、检查确认Rewrite模块加载
本文测试是在CentOS 6系统上,路径为:/etc/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
如果前面有注释就去掉即可,重启APACHE。
2、检查确认目录Rewrite打开
Rewrite库加载不代表我们的.htaccess文件就能生效,还需要专门打开指定目录的AllowOveride开关,脚本如下:
<Directory/var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
其中AllowOverride只能定义在Directory这个Section里,具体用法可参考apache官方说明(下文链接),以上脚本一般放在httpd.conf或/etc/httpd/conf.d/vhost.conf下面,尽量更网站配置的:
<VirtualHost...>....</VirtualHost>
定义在一起,方便维护。
3、测试Rewrite功能
以下为.htaccess测试实例:
# BEGIN
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase/
RewriteRule.*$ http://www.metsky.com
</IfModule>
#END
测试方法,拷贝保存为.htaccess,上传到网站根目录下,访问网站任何路径页面,均会跳转到本博客,说明Rewrite已生效。
为什么当AllowOverride All时Apache出错
AllowOverride从字面上解释是允许覆盖的意思,即Apache允许另一配置文件覆盖现有配置文件。我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在.htaccess文件里。但要使 apache能够正常的读取.htaccess文件的内容,就必须对.htaccess所在目录进行配置。
从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override,即:
< Directory/>
AllowOverride None
</Directory>
在 AllowOverride设置为 None时,.htaccess文件将被完全忽略。当此指令设置为 All时,所有具有“.htaccess”作用域的指令都允许出现在.htaccess文件中。
更多相关知识可参考:https://panxu.net/article/8410.html
感谢您花时间阅读本文!我们希望通过对allowoverride的问题进行探讨,为您提供了一些有用的见解和解决方案。如果您需要更多帮助或者有其他疑问,请不要犹豫与我们联系。