当你在你的Apache设置中设置服务器环境变量,它可以读取从PHP变量使用内置的功能。
但你可以阅读从一个htaccess文件中的变量?
我想要在我的htaccess做到的是沿着线的东西:
<If var=="stuff">
do things here
</if>
<if var=="different stuff">
do different things here
</if>
当你在你的Apache设置中设置服务器环境变量,它可以读取从PHP变量使用内置的功能。
但你可以阅读从一个htaccess文件中的变量?
我想要在我的htaccess做到的是沿着线的东西:
<If var=="stuff">
do things here
</if>
<if var=="different stuff">
do different things here
</if>
是的。
你可能会想使用mod_setenvif功能,因此该模块将需要开启。
然后,你只需做一些事情,如:
SetEnvIf Request_URI "\.gif$" image_type=gif
这将设置环境变量image_type
具有的价值gif
如果请求的文件名称结尾.gif
。
然后,您可以(在类似的RewriteCond)这样的访问此:
RewriteCond %{ENV:image_type} gif
RewriteRule ^(.*) $.gif
你可以在这里阅读完整的文档: http://httpd.apache.org/docs/2.2/env.html
由于我有很多的问题,建立认识我的家localhost作为不同类似的事情,我的工作设置,这里就是我终于实现了。
首先,在<IF ..>
指令不能识别SETENV。 从http://httpd.apache.org/docs/current/env.html :“SetEnv指令请求处理这意味着指令,如SetEnvIf之后和的RewriteCond不会看到它设置的变量中后期运行。”
因此,尝试,如果你能使用SetEnvIf之后。 我很懒惰,只是把这个在我的httpd.conf文件。 它会检查它运行于localhost - 这显然是 - 然后设置变量:
SetEnvIf Server_Addr ^127\.0\.0\.1$ home_variable
然后,在其他地方,在我的htaccess的文件我有这样的:
# IfVersion needs mod_version - you could do an ifmodule before all this i guess
# we use ifversion because If was introduced in apache 2.4
<IfVersion >= 2.4>
# check if the home variable exists/isn't: empty, "0", "off", "false", or "no"
<If "-T reqenv('home_variable')">
... do home-y stuff
</If>
<Else>
... do work-y stuff
</Else>
</IfVersion>
# fallback
<IfVersion < 2.4>
.. fallback?
</IfVersion>
或者,你可以只是一个变量为每个环境,并给它一个特定值:
SetEnvIf Server_Addr ^127\.0\.0\.1$ check_location=home
那么剩下的将是相同的,除了第一<If ..>
语句:
<If "%{ENV:check_location} == 'home'">....</If>
我测试过这两个家庭环境与2.4和工作环境之间有2.2,这两者已使mod_version(因此不与ifmod困扰)的。
(I还没有测试超过两个环境但是Apache 2.4确实得到<ElseIf>
使得也是一个选项)。
杜朋迪做的。
(更多关于-T操作员等人: http://httpd.apache.org/docs/current/expr.html )
阿帕奇2.4引入<If>
, <Else>
, <ElseIf>
块结合了新的表达式语法用于.htaccess文件更强大的程序化控制等
这是未经测试,但表面上的工作原理:
<If "%{MY_VAR} == 'my result'">
…
</If>
来源: https://blogs.apache.org/httpd/entry/new_in_httpd_2_4
我给了描述和的.htaccess和PHP的例子在这里: 在.htaccess中设置一个环境变量和PHP检索
对于在.htaccess只是一些例子,从我的修改易腐按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>
注意使用paramters的。 %0给出了完整的字符串,%1给出了从第1个括号中的语句,2%,2号的比赛。 该连字符是文字显示字符,在视觉上独立(不认为是任何方式把空间在那里)。