當使用 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設置的值,引導用戶使用