Apache HTTP 服务器教程:.htaccess 文件
.htaccessfiles 提供了一种进行配置 基于每个目录的更改。
.htaccess 文件
| 相关模块 | 相关指令 |
|---|---|
.htaccess.htaccess.htaccessDirectory它们是什么/如何使用它们
.htaccess文件(或“分布式配置文件”) 提供一种基于每个目录进行配置更改的方法。一个 文件(包含一个或多个配置指令)放置在 particular document 目录,并且指令适用于该目录 目录及其所有子目录。
注意:
如果您想将文件命名为 否则,您可以使用 Directive 更改文件名。例如 如果您更愿意调用该文件,那么您 可以将以下内容放入您的服务器配置文件中:.htaccessAccessFileName.config
通常,文件使用与 主要配置 文件。您可以在这些文件中添加的内容由指令决定。这 directive 在 categories 中指定 directive 将是什么 如果它们在文件中找到,则为 honor。如果 指令,则 该指令的文档将包含一个 Override 部分, 指定必须要输入的值才能实现该 指令。.htaccessAllowOverride.htaccess.htaccessAllowOverride
例如,如果您查看该指令的文档,您会发现 files 中允许它。(请参阅指令摘要中的 Context 行。Override 行显示为 .因此,您至少必须具有 才能使此指令为 在文件中 honored 。AddDefaultCharset.htaccessFileInfoAllowOverride FileInfo.htaccess
如果您不确定文件中是否允许使用特定指令,请查看该文档 指令,并检查 Context 行中的 “.htaccess”。.htaccess
何时(不)使用 .htaccess 文件
通常,您应该只在以下情况下使用文件 您无权访问主服务器配置文件。有 例如,一个常见的误解是用户身份验证应该 总是以文件的形式完成,而且,在最近几年, 另一个误解是 directives 必须进入文件。这根本不是 箱。您可以将用户身份验证配置放在主服务器中 配置,而这实际上是首选的 事情。同样,指令效果更好, 在许多方面,在主服务器配置中。.htaccess.htaccessmod_rewrite.htaccessmod_rewrite
.htaccessfiles 应在 内容提供程序需要对 基于目录,但在服务器系统上没有 root 访问权限。 如果服务器管理员不愿意 频繁的配置更改,可能需要允许 单个用户在文件中进行这些更改 为了他们自己。例如,在以下情况下尤其如此 ISP 在一台机器上托管多个用户站点,并希望 他们的用户能够更改他们的配置。.htaccess
但是,一般来说,文件的使用应该是 尽可能避免。您将考虑的任何配置 放入一个文件中,也可以同样有效地 在主服务器的某个部分制作 配置文件。.htaccess.htaccess
避免使用文件有两个主要原因。.htaccess
首先是性能。当设置为允许使用文件时,httpd 将 在每个目录中查找文件。因此 允许文件会导致性能下降, 无论您是否真的使用它们!此外,每次文档 要求。AllowOverride.htaccess.htaccess.htaccess.htaccess
进一步注意,httpd 必须查找文件 在所有更高级别的目录中,为了获得完整的 指令。(请参阅有关如何操作的部分 指令。因此,如果从 目录中,httpd 必须查找 以下文件:.htaccess/www/htdocs/example
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
因此,对于该目录外的每个文件访问,有 4 个 其他文件系统访问,即使这些文件都不是 目前。(请注意,仅当为 启用了文件时,才会出现这种情况,而 通常不是这种情况。.htaccess/
对于指令,在上下文中,这些正则表达式必须是 使用对目录的每个请求重新编译,而在 main server configuration 上下文,它们被编译一次并缓存。 此外,规则本身也更加复杂,这是必须的 解决每个目录上下文附带的限制 和。有关更多信息,请参阅 Rewrite Guide 关于这个主题的细节。RewriteRule.htaccessmod_rewrite
第二个考虑因素是安全性。您允许 用户修改服务器配置,这可能会导致 这是你无法控制的。仔细考虑是否要捐赠 您的用户具有此权限。另请注意,给 users 较少的 特权将导致额外的技术支持 请求。请务必清楚地告诉用户 您授予他们的权限。准确指定您设置的内容,并指向它们 到相关文档,会省去很多困惑 后。AllowOverride
请注意,它完全等同于将文件放在包含 指令,并将相同的指令放在主服务器的 Directory 部分中 配置:.htaccess/www/htdocs/example
.htaccess文件在 :/www/htdocs/example
中 .htaccess 文件的内容/www/htdocs/example
文件部分httpd.conf
但是,将此配置放在服务器配置中 file 将导致较小的性能影响,因为配置 在 httpd 启动时加载一次,而不是每次文件 要求。
可以完全禁用文件的使用 通过将指令设置为 :.htaccessAllowOverridenone
如何应用指令
在文件中找到的配置指令 将应用于文件所在的目录 及其所有子目录。然而,这很重要 还要记住,可能已经有文件了 在更高的目录中。指令按照它们的顺序应用 找到。因此,特定 directory 可能会覆盖在文件中找到的指令 在目录树的较高位置找到。而这些反过来可能具有 被覆盖的指令 - 在更高的位置或在主服务器中找到 配置文件本身。.htaccess.htaccess.htaccess.htaccess.htaccess
例:
在该目录中,我们有一个包含以下内容的文件:/www/htdocs/example1.htaccess
(注意:您必须具有 “” 有效 以允许在 files 中使用 “” 指令。AllowOverride OptionsOptions.htaccess
在目录中,我们有 一个包含以下内容的文件:/www/htdocs/example1/example2.htaccess
由于第二个文件,在目录中,CGI 执行不是 permitd,因为只有 is in effect,它 完全覆盖可能已位于 地方。.htaccess/www/htdocs/example1/example2Options Includes
.htaccess 与主 配置文件
如有关配置部分的文档中所述,文件可以覆盖 相应的目录,但将被其他类型覆盖 的配置部分。这 fact 可用于强制执行某些配置,即使在 自由环境的存在。例如,到 阻止脚本执行,同时允许设置任何其他内容,您可以使用:.htaccessAllowOverride.htaccess
身份验证示例
如果您直接跳转到文档的这一部分以了解如何操作 要进行身份验证,请务必注意一件事。有一个 常见的误解,认为您需要使用文件才能实现密码 认证。事实并非如此。放置身份验证指令 在主服务器配置文件中的某个部分,是首选方式 来实现这一点,并且 files 应该只被使用 如果您无权访问主服务器配置文件。请参阅上文,了解何时应该和应该 不使用文件。.htaccess.htaccess.htaccess
话虽如此,如果你仍然认为你需要使用一个文件,你可能会发现像 以下内容可能对您有用。.htaccess
.htaccess文件内容:
请注意,必须生效 使这些指令生效。AllowOverride AuthConfig
请参阅身份验证教程以获取 对身份验证和授权的更完整讨论。
服务器端包含示例
文件的另一个常见用途是启用 特定目录的服务器端包含。这可以通过 以下配置指令,放置在所需目录中的文件中:.htaccess.htaccess
请注意,和 必须同时生效,这些指令才能具有任何 影响。AllowOverride OptionsAllowOverride FileInfo
请参阅 SSI 教程了解更多信息 服务器端包含的完整讨论。
重写 .htaccess 文件中的规则
在 files 中使用时,请注意每个目录的上下文 稍微改变了一点。特别是,规则被视为相对于 当前目录,而不是原始请求的 URI。 请考虑以下示例:RewriteRule.htaccess
在文档目录中,前导 slash 将从提供给 的值中删除,并在子目录中从 它。因此,您的正则表达式需要省略该部分,因为 井。.htaccessRewriteRuleimages/images/
请参阅 mod_rewrite 文档 有关使用 的更多详细信息。mod_rewrite
CGI 示例
最后,您可能希望使用文件来允许 在特定目录中执行 CGI 程序。这可能是 使用以下配置实现:.htaccess
或者,如果您希望给定目录中的所有文件都是 被视为 CGI 程序,这可以通过以下方式完成 配置:
请注意,和 必须同时生效,这些指令才能具有任何 影响。AllowOverride OptionsAllowOverride FileInfo
请参阅 CGI 教程了解更多信息 CGI 编程和配置的完整讨论。
故障 排除
当你把配置指令放在一个文件中,但没有得到想要的效果时,会有很多 可能出错的事情。.htaccess
最常见的问题是 set 的 set 中,以便遵循您的配置指令。做 确保您没有 In Effect 对于有问题的文件范围。一个很好的测试是将 garbage 并重新加载页面。如果服务器错误为 未生成,那么您几乎可以肯定 In effect.AllowOverrideAllowOverride None.htaccessAllowOverride None
另一方面,如果您在尝试 访问文档,请检查 httpd 错误日志。它可能会告诉你 文件中使用的指令不是 允许。.htaccess
[Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here
这将表明您使用的指令是 从不允许在文件中显示,或者您只是 don't have set to 一个足以满足您使用的指令的级别。查阅 该特定指令的文档,以确定哪个指令是 案子。.htaccessAllowOverride
或者,它可能会告诉您 指令本身的用法。
[Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters
在这种情况下,错误消息应特定于 您提交的特定语法错误



