首页编程allowoverride 为什么当AllowOverride All时Apache出错

allowoverride 为什么当AllowOverride All时Apache出错

编程之家2023-11-0674次浏览

其实allowoverride的问题并不复杂,但是又很多的朋友都不太了解为什么当AllowOverride All时Apache出错,因此呢,今天小编就来为大家分享allowoverride的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

allowoverride 为什么当AllowOverride All时Apache出错

如何添加Apache服务器用户验证AllowOverride AuthConfig

apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。

通常分为以下三步:

1、在apache的配置文件httpd.conf中声明要进行验证的目录

2、在要进行验证的目录中创建.htaccess文件,在此文件中指明用于验证的文件存放的位置

3、根据.htaccess指明的位置,用apache自带的htpasswd命令创建用于验证的文件

步骤说明:

allowoverride 为什么当AllowOverride All时Apache出错

假设要对/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 为什么当AllowOverride All时Apache出错

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的问题进行探讨,为您提供了一些有用的见解和解决方案。如果您需要更多帮助或者有其他疑问,请不要犹豫与我们联系。

androidbroadcast?Android系统中的Broadcast和Intent有什么区别12306数据库 12306什么时候与公安人口数据库联网