Bru*_*ier 41 php apache .htaccess environment-variables
我试图在.htaccess文件中设置一个环境变量并在PHP中检索它.我在这里看了很多其他线程,但到目前为止我尝试的所有内容都失败了.
我已将此行添加到.htaccess文件中:
SetEnv SPECIAL_PATH /foo/bin
Run Code Online (Sandbox Code Playgroud)
我尝试使用getenv()PHP函数检索此值:
<?php $specialPath = getenv('SPECIAL_PATH'); ?>
Run Code Online (Sandbox Code Playgroud)
我已经运行了phpinfo()来查看可用的环境变量列表,SPECIAL_PATH不在那里.我很困惑为什么这不起作用.
谢谢!
Jac*_*b S 30
假设您的配置具有带有.htaccess的AllowOverrides,则必须在Apache中启用mod_env才能使其正常工作.
Apache Docs custom-error.html涵盖传递给错误处理页面的环境变量
说"REDIRECT_环境变量是从重定向之前存在的环境变量创建的.它们用REDIRECT_前缀重命名,即HTTP_USER_AGENT
成为REDIRECT_HTTP_USER_AGENT
."
说"如果ErrorDocument目标是一个外部重定向(任何以方案名称开头的内容,如http:,即使它引用与服务器相同的主机),也不会设置这些内容."
关于SetEnv说:"该指令设置的内部环境变量是在大多数早期请求处理指令运行后设置的,例如访问控制和URI到文件名的映射.如果您设置的环境变量是作为此输入的输入在处理的早期阶段,例如RewriteRule指令,你应该用SetEnvIf设置环境变量."
在某些服务器上,出于安全目的,用户声明的环境变量必须以"HTTP_"开头,例如: SetEnv HTTP_MY_VARIABLE "my value"
以下是设置和使用服务器环境变量的一些.htaccess方法,取自我修改Perishable Press 5G黑名单/防火墙http://perishablepress.com/5g-blacklist-2013/以使用环境变量报告:
SetEnv myServerName %{SERVER_NAME}
RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig|open_basedir) [NC,OR]
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR]
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC]
RewriteRule .* - [E=badQueryString:%0--%1--%2,F,L]
SetEnvIfNoCase User-Agent ^$ noUserAgent
SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) badUserAgent=$1
<limit GET POST PUT>
Order Allow,Deny
Allow from all
Deny from env=badUserAgent
</limit>
Run Code Online (Sandbox Code Playgroud)
注意使用参数,例如$ 0 - %1 - %2.%0给出完整字符串,%1给出第一个带括号的语句匹配,%2给出第二个.连字符是文字显示字符,用于在视觉上分隔参数结果(不要认为有任何方法可以在其中放置空格).
以下是一些访问环境变量的PHP方法(在我的例子中来自403.php和404.php).请注意,你不是在phpinfo()中查找,而是在$ SERVER中,并且你的变量以REDIRECT为前缀 注意,使用403/404重定向,QUERY_STRING变为REDIRECT_QUERY_STRING这可能很容易依赖服务器,所以检查$ _SERVER以获取实际值.例如,
if (getenv("HTTP_REFERER") !== FALSE) {
$httpref = getenv("HTTP_REFERER");
} else {
$httpref = '';
}
if (isset($_SERVER['REDIRECT_STATUS'])) {
$status = $_SERVER['REDIRECT_STATUS'];
} else {
$status = '';
}
if (isset($_SERVER['REMOTE_HOST'])) {
$remoteHost = $_SERVER['REMOTE_HOST'];
} else {
$remoteHost = '';
}
if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {
$querystring = $_SERVER['REDIRECT_QUERY_STRING'];
} else {
$querystring = '';
}
if (isset($_SERVER['REDIRECT_noUserAgent']) ) {
$htaccessErrors[] = 'NoUserAgent';
}
if (getenv("REDIRECT_badQueryString") !== FALSE) {
/* must exactly match what shows up in $_SERVER, is case sensitive (e.g. badQueryString not BadQueryString) */
$htaccessErrors[] = 'badQueryString:'.getenv("REDIRECT_badQueryString");
}
Run Code Online (Sandbox Code Playgroud)
我在http://lcblog.lernerconsult.com/2013-server-alert-you-file-not-found-errors/中深入介绍
归档时间: |
|
查看次数: |
57567 次 |
最近记录: |