首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件AddHandler指令

条件AddHandler指令
EN

Webmasters Stack Exchange用户
提问于 2011-11-30 23:33:19
回答 2查看 840关注 0票数 1

是否可以在Apache (2.x)下的.htaccess中有条件地调用AddHandler?

我目前的情况是,一个生产服务器需要一个特定的AddHandler,而另一个需要破坏开发服务器。这需要有两个版本的.htaccess,这是痛苦。因此,我想将一个AddHandler包装在一个条件中。这类东西:

代码语言:javascript
复制
IF IP=='1.2.3.4' THEN
AddHandler type/foo .ext
ENDIF

这个问题是新的,但我暂时无法控制。我知道这是远远不理想的,服务器过去是100%匹配的,因为他们应该,但暂时他们不能。

EN

回答 2

Webmasters Stack Exchange用户

回答已采纳

发布于 2012-02-25 14:29:09

使用mod_rewrite和H=标志。在.htaccess中,如果在标志中设置H=,则使用-作为替代。然后,您可以在RewriteCond中进行IP检查。

这是一些(未经测试的)实现这一目标的代码:

代码语言:javascript
复制
# Standard preamble for using mod_rewrite in a root .htaccess file:
RewriteEngine On
RewriteBase /
Options +FollowSymLinks

# Handle .ext files as type/foo if the server address is 1.2.3.4:
RewriteCond %{SERVER_ADDR} =1.2.3.4
RewriteCond %{SCRIPT_FILENAME} \.ext$
RewriteRule ^ - [H=type/foo]
票数 3
EN

Webmasters Stack Exchange用户

发布于 2012-02-25 17:41:08

不幸的是,Apache对条件配置的支持非常有限。除了在内部具有条件计算的特定模块(如mod_rewrite )之外,您仅限于、,而且我相信还有一种方法可以根据文件或目录的存在启用指令。

IfDefine允许您根据启动时通过-D定义的变量启用配置。

代码语言:javascript
复制
httpd -Dstaging

或者您可以使用Define

代码语言:javascript
复制
Define staging staging

不幸的是,IfDefine只计算变量是否已定义,而不是其值。尽管你不能在你的配置中有条件地定义它,所以这并不是什么损失。

因此,如果在生产服务器和暂存服务器上启用了不同的模块,或者使用自定义配置变量启动暂存服务器,则这将是您的解决方案。

否则,我想我们将不得不等待某个人创建允许我们执行的mod_if的那一天:

代码语言:javascript
复制
DefineIf Server_Addr "127\.0\.0\.1" env=staging:production

<If env=staging>
   AddHandler foo-handler .foo
</If>
票数 0
EN
页面原文内容由Webmasters Stack Exchange提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://webmasters.stackexchange.com/questions/22738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档