【发布时间】:2012-02-05 13:27:11
【问题描述】:
有没有办法从.htaccess 中设置自定义变量,以便每个 php 脚本都可以从中读取?我什么也没去谷歌搜索。
谢谢!
【问题讨论】:
有没有办法从.htaccess 中设置自定义变量,以便每个 php 脚本都可以从中读取?我什么也没去谷歌搜索。
谢谢!
【问题讨论】:
我用环境变量告诉我“5G黑名单”防火墙脚本http://perishablepress.com/5g-blacklist-2013/的哪一部分被渣男触发了
例如,防火墙的一部分阻止了最常见的垃圾邮件发送者查询字符串:
RewriteBase /
RewriteCond %{QUERY_STRING} (\"|%22).*(<|>|%3) [NC,OR]
RewriteCond %{QUERY_STRING} (javascript:).*(\;) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3) [NC,OR]
RewriteCond %{QUERY_STRING} (\\|\.\./|`|=\'$|=%27$) [NC,OR]
RewriteCond %{QUERY_STRING} (\;|\'|\"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if) [NC,OR]
RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig) [NC,OR]
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR]
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC]
RewriteRule .* - [E=BadQueryString,F]
看到 E=BadQueryString 了吗?我补充说。语法当然必须准确。
然后在我处理 403: Permission denied 错误的 PHP 程序中,我以这种方式使用它(注意此服务器在环境变量名称前添加了“REDIRECT_”):
if (getenv("REDIRECT_BadQueryString") !== FALSE) {
$htaccessErrors .= ' BadQueryString';
if (getenv("REDIRECT_QUERY_STRING") !== FALSE) {
$htaccessErrors .= getenv("REDIRECT_QUERY_STRING");
}
}
这是另一个.htaccess示例,测试User-Agent服务器变量并使用环境变量,如果设置了,然后环境变量在我的403.php中可用
SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) BadUserAgent
<limit GET POST PUT>
Order Allow,Deny
Allow from all
Deny from env=BadUserAgent
</limit>
【讨论】:
如果您希望从 $_GET 数组中访问变量(这将覆盖通过 get 发送到服务器的任何变量)
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ $1?%1&myvar=something
%1 无论查询字符串是什么
【讨论】:
RewriteCond %{QUERY_STRING} !myvar 以防止无限循环。
您可以在.htaccess(或http.conf)中设置环境变量:
SetEnv foo bar
并通过
在 PHP 中访问它们$_ENV['foo']
【讨论】:
使用mod_setenvif 之类的东西怎么样?更多详细信息,请访问http://httpd.apache.org/docs/current/env.html。
【讨论】:
您只能从 .htaccess 中设置环境变量:
SetEnv MYVAR whatever
这在$_SERVER 数组中可用:
print $_SERVER["MYVAR"];
所以,不完全是一个全局变量。但对于某些用途仍然有用。
(另一种选择是声明auto_prepend_file 来预定义变量。但这更像是一种解决方法。)
【讨论】: