当使用 PHP 做为 Apache 模块时,也可使用 Apache 配置文件(例如:httpd.conf) 和 .htaccess 文件中的指令来修改 PHP 的配置php
设定,不过须要有 "AllowOverride Options" 或 "AllowOverride All" 权限才能够git
哪些指令可让用户在 Apache 配置文件内部修改 PHP 的配置?github
属于 PHP_INI_ALL、PHP_INI_PERDIR、或 PHP_INI_SYSTEM 中的一个,能够参考看 php.ini 配置选项列表:http://php.net/manual/zh/ini.list.phpapache
php.ini 配置选项列表里面的"可修改范围"决定了该配置在什么状况下能够被配置,能够参考:http://php.net/manual/zh/configuration.changes.modes.phpcentos
PHP_INI_* 模式定义了一个 PHP 指令在什么时候何地,是否可以被设定,手册中的每一个指令都有其所属的模式。例若有些指令能够在 PHP 脚本中用 ini_set安全
() 来设定,而有些只能在 php.ini 或 httpd.conf 中,例如:output_buffering 指令是属于PHP_INI_PERDIR(可在 php.ini,.htaccess 或 httpd_conf 中设定),服务器
于是就不能使用 ini_set() 来设定,可是像 display_errors 指令属于 PHP_INI_ALL 于是就能够在任何地方被设定,包括使用 ini_set()分布式
php_admin_value name value ide
设定指定的指令的值,不能用于 .htaccess 文件,任何用 php_admin_value 设定的指令都不能被 .htaccess 或 virtualhost 中的指令覆盖性能
php_admin_flag name on | off
用来设定布尔值的配置指令 ,不能用于 .htaccess 文件,任何用 php_admin_flag 设定的指令都不能被 .htaccess 或 virtualhost 中的指令覆盖
参考常见 apache php_admin_flag、php_admin_value 设置:
https://hcldirgit.github.io/2017/10/13/Php/7.%20%E5%B8%B8%E8%A7%81apache%20php_admin_value%20php_admin_flag%20%E8%AE%BE%E7%BD%AE/
注意:php_admin_flag、php_admin_value 通常用于 httpd.conf
php_value name value
设置指定的值,只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令
php_flag name on | off
用来设定布尔值的配置指令,只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令
php_value、php_flag 主要用于 .htaccess 中,但若是是 PHP_INI_ALL 类型的指令能够在任何地方被设定
而 value 和 flag 的区别在于:value 用于设置值,flag 用于只能是 on | off
--------------------------------------------------------2019/03/16 更新---------------------------------------------------------
关于 .htaccess 文件
参考文章:
https://blog.csdn.net/u013927110/article/details/41414091
https://www.centos.bz/2017/11/apache-htaccess%E6%96%87%E4%BB%B6%E8%AF%A6%E8%A7%A3%E5%92%8C%E9%85%8D%E7%BD%AE%E6%8A%80%E5%B7%A7%E6%80%BB%E7%BB%93/
.htaccess 文件是一个纯文本文件,它里面存放着 apache 服务器配置的相关指令,。htaccess 主要的做用有:URL 重写、自定义错误页面等。主要体如今
伪静态的应用、图片防盗链、自定义404错误页面、禁止访问指定文件类型等等,.htaccess 的做用范围针对当前目录以及该目录的子目录
有时候咱们须要修改 apache 的一些默认配置,可是又不想对 apache 的httpd.conf 修改太多,咱们就可使用
.htaccess(分布式配置文件) 来达到目的,.htaccess 提供了针对每一个目录改变配置的方法,即在一个特定目录中放
置一个包含指令的文件,其中的指令做用于此目录以及其全部的子目录
咱们须要让 apache 来读取它,这就须要修改 httpd.conf 文件
apache 都有本身默认的项目根目录,在 DocumentRoot "D:/www" 下面,有一个<Directory>的东西,它里面有这样一段代码 AllowOverride None ,若是
咱们把 None 改为 All,那么在 www 目录下的全部项目都能读取到 .htaccess
虽然仅仅只是改动一个单词,可是这里面的弊端也是挺多的,好比说:每次访问项目的时候,apache 都会对全部的 .htaccess 文件进行读取,处理速度大
大下降;每个项目都能修改 apache 配置,安全性大大下降
通常状况下都避免使用 .htaccess 缘由主要有:
1. 性能:若是 AllowOverride 启用了 .htaccess ,那么 apache 须要在每一个目录中查找 .htaccess 文件,因此,不管是否真正用到,启用 .htaccess 都会致使
性能降低,另外,对每个请求,都须要读取一次 .htaccess 文件
2. 安全性:容许用户修改 apache 配置,可能会致使一些意想不到的问题,因此须要认证考虑是否给与用户这样的权限。可是,若是给与用户比较少的权限
可能又没法知足用户的需求,会带来额外的技术支持,因此,须要明确告诉用户已经给与他们的权限,说明AllowOverride设置的值,引导用户使用