深入理解PHP的.htaccess文件

导语:PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。下面我们来深入理解PHP的.htaccess文件,希望对大家有所帮助。

工作原理和使用方法

.htaccess文件(分布式配置文件)提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。

如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config

通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许在.htaccess中使用,那么在本手册的说明中,此指令会有一个覆盖项段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。

使用.htaccess文件的场合

一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。

.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。

虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。

避免使用.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文件中放置指令,与在主配置文件中段中放置相同指令,是完全等效的。

把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。

指令的生效

.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文件能够覆盖段中对相应目录的设置,但是也同样会被主配置文件中其它类型的配置段所覆盖。这个特性可以用来强制实施某些配置,甚至在AllowOverride已经许可的情况下。举个例子来说,为了强迫在.htaccess中禁止脚本执行但不限制其它的`情况下,可以这样:

Allowoverride All

Options +IncludesNoExec -ExecCGI

认证举例

如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实是不正确的。把认证指令放在主配置文件的段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主配置文件的时候。参见上述关于何时应该与何时不应该使用.htaccess文件的讨论。

有此声明在先,如果你仍然需要使用.htaccess文件,请继续看以下说明。.htaccess文件的内容:

必须设置 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文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。

【深入理解PHP的.htaccess文件】相关文章:

php的htaccess,深入理解PHP的.htaccess文件相关推荐

  1. php的.htaccess文件目录,子目录中的.htaccess文件

    子目录中的.htaccess文件 在计算机的文件系统中,每个文件和目录各自都配有许可权限,这些权限规定了哪些文件是可读的,哪些是可写入的,哪些是可执行的. 许可权限系统是一种保护用户网站安全性的基本措 ...

  2. 深入理解Qt的.pro文件

    深入理解Qt的pro文件 模板变量 生成目录 生成的应用程序名 编译选项 目标文件目录 包含头文件 包含源文件 包含资源文件 附加头文件包含 链接库 预编译宏 平台相关性处理 指定来自ui文件位置 指 ...

  3. 理解块存储、文件存储和对象存储的应用场景和选择

    理解块存储.文件存储和对象存储的应用场景和选择# 应用场景(王豪迈(麦子迈|wheats))# 分布式存储的应用场景相对于其存储接口,现在流行分为三种: 对象存储: 也就是通常意义的键值存储,其接口就 ...

  4. .htaccess 重定向_如何使用.htaccess将HTTP重定向到HTTPS

    .htaccess 重定向 Chrome and Firefox have started showing insecure warnings on sites without SSL certifi ...

  5. .htaccess重写、安全防护、文件访问权限

    今天在<外刊IT评论>上看见了关于.htaccess的使用总结,觉得很不错的,因为wp博客还有其他的php的web服务站点好多都是用.htaccess来管理比如效率以及安全的问题,有必要来 ...

  6. nginx php .htaccess,Linux下nginx支持.htaccess文件实现伪静态的方法

    方法如下: 1. 在需要使用.htaccess文件的目录下新建一个.htaccess文件, 如本人的一个Discuz论坛目录: vim /var/www/html/168pc/bbs/.htacces ...

  7. nginx php htaccess,Nginx为什么不支持.htaccess文件

    前曾在Typecho开发群中与王轶讨论了关于Nginx支持.htaccess文件的问题.王轶认为,Nginx能够支持.htaccess规则,且兼容Apache规则.我认为,Nginx支持使用.htac ...

  8. nginx php htaccess,使Nginx服务器支持.htaccess的方法

    可能很多朋友都常用nginx不支持.htaccess,只有apache才支持.htaccess文件,其实这是错误的看法nginx也是支持.hatccess的哦,下面我来给各位总结一下配置方法. 其实n ...

  9. 深入理解Linux中的文件权限

    Linux中文件权限 Linux中每个文件都有一个特定的拥有者(一般是创建它的用户)和所属用户组,这是它的固有属性.文件可以利用这两个固有属性来规定它的拥有者或者是所属用户组内的用户是否拥有对它的访问 ...

最新文章

  1. 菜鸟刚入手Python第一天
  2. 团队项目第一阶段冲刺站立会议06
  3. 营销 | 10个助燃商业增长的市场营销战略!
  4. laravel session redis 设置
  5. 学习笔记︱深度学习以及R中并行算法的应用(GPU)
  6. 单片机modbus rtu通讯_西门子S7-1200与汇川IS620P伺服通讯教程
  7. 基于MATLAB的数字图像处理
  8. DFS cdoevs 3100 蜗牛
  9. 程序猿段子_程序员段子
  10. c语言 交互式电子白板案例,交互式电子白板案例分析
  11. 将格林尼治时间转日期格式
  12. From Nand to Tetris Week1 超详细2021
  13. AppStore发布流程(从证书创建到app发布一站式)
  14. RFSoC应用笔记 - RF数据转换器 -10- RFSoC关键配置之其他功能(一)
  15. Java实现递归 斐波那契数列 阶乘
  16. UIQ来电监听挂断原理和代码
  17. mysql最近24小时数据_mysql中如何查询最近24小时、top n查询
  18. 公司食堂-美团2021校招笔试(线性数据结构的应用)
  19. 实时全局光照RSM-Reflective Shadow Maps(RSM)
  20. 【ENVI入门系列】15.遥感动态监测

热门文章

  1. 【每日一知】什么是内聚和耦合? (2021.02.02 )
  2. 让盖泡面的iPad成为你的副屏
  3. 如何在GitHub中快速找到想学的项目,技术或搜人
  4. 升级进度条动画的处理思路
  5. 点积和叉积的几何意义
  6. DBCO-amine Cas:1255942-06-3,DBCO-NH2,二苯基环辛炔-氨基可衍生DBCO-PEG-NH2
  7. vue跳转弹出新页面
  8. html创建文字,Three中创建文字的几种方法
  9. HDU-用N个三角形最多可以把平面分成几个区域
  10. 【2023年五一数学建模竞赛B题】快递需求分析问题--完整paper和代码