htaccess是什么
.htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
- 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。
- .htaccess必须以ASCII模式上传,最好将其权限设置为644。
Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。国内的大多数虚拟主机就没有这个功能。我所知道的提供这个功能的有康盛世纪(就是Discuz的论坛服务商)。
启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。
笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。
htaccess 工作原理和使用方法
htaccess文件(或者"分布式配置文件")提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。
说明:
如果需要使用.htaccess以外的其他文件名,可以用 AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:
AccessFileName .config
通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许在.htaccess中使用,那么在本手册的说明中,此指令会有一个覆盖项段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。
例如,本手册对AddDefaultCharset指令的阐述表明此指令可以用于.htaccess文件中(见"作用域"项),而覆盖项一行是 FileInfo ,那么为了使.htaccess中的此指令有效,则至少要设置 AllowOverride FileInfo 。
例子:
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
如果不能确定某个指令是否可以用于.htaccess文件,可以查阅手册中对指令的说明,看在"作用域"行中是否有".htaccess" 。
(不) 使用.htaccess文件的场合
一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。
.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有 root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的<Directory>段中,而且更高效。
避免使用.htaccess文件有两个主要原因。
首先是性能。如果 AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。
还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用(参见指令的生效),所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
总共要访问4个额外的文件,即使这些文件都不存在。(注意,这可能仅仅由于允许根目录"/"使用.htaccess ,虽然这种情况并不多。)
其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。
注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中<Directory /www/htdocs/example>段中放置相同指令,是完全等效的。
/www/htdocs/example目录下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf文件中摘录的内容:
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
但是,把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。
将AllowOverride设置为none 可以完全禁止使用.htaccess文件:
AllowOverride None
htaccess指令的生效
.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
例子:
/www/htdocs/example1目录中的.htaccess文件有如下内容:
Options +ExecCGI
(注意:必须设置"AllowOverride Options"以允许在.htaccess中使用"Options"指令)
/www/htdocs/example1/example2目录中的.htaccess文件有如下内容:
Options Includes
由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许 Options Includes ,它完全覆盖了之前的设置。
将.htaccess合并到主配置文件中
正如在配置段(容器)中讨论的那样,.htaccess文件能够覆盖<Directory>段中对相应目录的设置,但是也同样会被主配置文件中其它类型的配置段所覆盖。这个特性可以用来强制实施某些配置,甚至在AllowOverride已经许可的情况下。举个例子来说,为了强迫在.htaccess中禁止脚本执行但不限制其它的情况下,可以这样:
<Directory />
Allowoverride All
</Directory>
<Location />
Options +IncludesNoExec -ExecCGI
</Location>
认证举例
如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实是不正确的。把认证指令放在主配置文件的<Directory>段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主配置文件的时候。参见上述关于何时应该与何时不应该使用.htaccess文件的讨论。
有此声明在先,如果你仍然需要使用.htaccess文件,请继续看以下说明。
.htaccess文件的内容:
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
必须设置 AllowOverride AuthConfig 以允许这些指令生效。
服务器端包含(SSI)举例
.htaccess文件的另一个常见用途是允许一个特定的目录使用服务器端包含(SSI),可以在需要的目录中放置.htaccess文件,并作如下配置:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。
CGI举例
可以通过.htaccess文件允许在特定的目录中执行 CGI程序,需要作如下配置:
Options +ExecCGI
AddHandler cgi-script cgi pl
另外,如下配置可以使给定目录下的所有文件被视为CGI程序:
Options +ExecCGI
SetHandler cgi-script
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。 如果在.htaccess文件中的某些指令不起作用,可能有多种原因。
最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 AllowOverride None 。
在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误
分享到:
相关推荐
首先,我们需要了解`.htaccess`文件的基本作用。它主要用于实现以下功能: 1. **URL重写**:通过使用mod_rewrite模块,`.htaccess`可以将复杂的URL转换为简洁、友好的格式,提升用户体验,同时也有利于SEO优化。 2...
每条指令都有其特定的作用和上下文,其中有些可以用于 `.htaccess` 文件,而有些只能在服务器配置级别使用。 性能影响: 由于每次请求都需要遍历目录结构寻找 `.htaccess` 文件,这会增加服务器的负载,特别是在...
1. **.htaccess 文件不起作用**:确保文件语法正确,且服务器已正确配置以支持 .htaccess 文件。 2. **访问被阻止**:检查是否有误操作导致特定 IP 被禁止访问。 3. **URL 重写失败**:确认 RewriteEngine 是否开启...
在BBS(Bulletin Board System,电子公告板系统)这样的论坛环境中,.htaccess 文件的作用尤为关键。它可以用来优化论坛的URL结构,使得帖子、分类等信息的链接更加直观易懂,提高用户的浏览体验。同时,针对论坛中...
这些功能对于优化网站性能、提高SEO友好性和隐藏真实路径等有重要作用。以下将详细介绍 `.htaccess` 文件中的一些关键指令及其作用: 1. **RewriteEngine**: 这个指令用于开启或关闭URL重写引擎。`RewriteEngine On...
这条命令的作用是开启URL重写引擎,即激活.htaccess文件中的所有重写指令。如果没有这行命令,那么后续的所有重写规则都不会生效。 ##### 2.2 设置重写条件(RewriteCond) 在`.htaccess`文件中,`RewriteCond`...
`.htaccess` 文件主要用于重写 URL、设置访问权限、指定错误页面、缓存控制、密码保护等任务,使得网站管理者能够更加灵活地管理和优化网站。 关于 `.htaccess` 文件的作用范围,这是个经常被误解的概念。`....
- **文件位置**:`.htaccess`通常放在网站的根目录或子目录下,其作用范围仅限于该目录及其子目录。 - **权限控制**:使用`Deny`和`Allow`指令可以控制IP访问,限制或允许特定用户的访问。 - **URL重写**:通过`...
2. .htaccess 文件可以包含多个指令,以作用于特定的目录或子目录。 3. .htaccess 文件需要以 ASCII 模式上传,并将其权限设置为 644。 三、.htaccess 文件的应用 1. 错误页面定制:可以使用 ErrorDocument 指令来...
在PHP开发中,页面重定向和自定义404错误页面是两个重要的概念,它们对于提升用户体验和网站管理效率有着显著的作用。本文将详细介绍如何利用`.htaccess`文件实现这两个功能。 首先,让我们来理解一下PHP页面重定向...
1. .htaccess 文件的作用:.htaccess 文件允许用户在网站的根目录下进行配置,无需对整个服务器的配置文件进行修改,增加了灵活性和安全性。 2. 常见功能: - URL 重写:通过 RewriteEngine 和 RewriteRule 指令...
首先,了解 `.htaccess` 文件的作用。`.htaccess` 是 Apache 服务器中的一种配置文件,允许我们在特定的目录级别上自定义网页配置,包括 URL 重写规则。这使得我们可以对 URL 进行美化,使其看起来更加直观和用户...
在使用Linux服务器,特别是CentOS系统时,遇到`.htaccess`文件不起作用的情况,这通常是由于Apache服务器的配置问题导致的。`.htaccess`文件是一个非常重要的配置文件,它允许我们在网站根目录下进行诸如URL重写、...
.htaccess 文件在文件上传中的使用 .htaccess 文件是一种 Apache 服务器下的配置文件,可以设置服务器...因此,在使用.htaccess 文件时,需要注意安全问题,限制用户上传.htaccess 文件,并对其进行严格的审核和验证。
总的来说,`.htaccess` 文件是Web服务器配置中一个非常实用的工具,它提供了灵活的权限管理和功能扩展能力,对于网站管理和优化具有重要的作用。通过熟练掌握 `.htaccess` 文件的用法,可以有效地调整服务器行为,...
1. **.htaccess 基本作用**: .htaccess 是一个纯文本文件,用于存放Apache服务器的配置指令。它的主要功能包括URL重写、自定义错误页面、设置MIME类型以及控制访问权限。比如,它可以用来实现伪静态URL、防止图片...
首先,.htaccess文件的主要作用是当用户无法直接编辑服务器的主配置文件httpd.conf时,提供了一种在目录级别进行配置的方法。例如,它能用来控制目录访问权限、URL重写、错误页面定制等。然而,如果服务器未正确配置...
在Discuz X1.5版本中,正确设置 htaccess 和 httpd.ini 文件是非常关键的,这涉及到如何通过配置文件让论坛的URL变得更加友好和符合搜索引擎优化(SEO)的要求。以下是关于这两个文件设置的知识点详细介绍: 1. ....
`.htaccess`文件主要用来实现URL重写、设置错误页面、限制访问等功能。以下是一些基本示例: ```apacheconf # .htaccess 文件所在目录 RewriteBase / # 打开重写引擎 RewriteEngine On # 匹配规则,这里以将.php...
首先,我们需要了解`.htaccess`文件的作用。它是Apache服务器中的一个配置文件,用于重写URL,实现隐藏`index.php`、处理URL路由等功能。在Laravel中,`.htaccess`文件位于`public`目录下,主要负责将所有请求重定向...