我目前的情况是,一个生产服务器需要一个特定的AddHandler,而另一个需要破坏开发服务器。这需要有两个版本的.htaccess,这是痛苦。因此,我想将一个AddHandler包装在一个条件中。这类东西:
IF IP=='1.2.3.4' THEN
AddHandler type/foo .ext
ENDIF这个问题是新的,但我暂时无法控制。我知道这是远远不理想的,服务器过去是100%匹配的,因为他们应该,但暂时他们不能。
发布于 2012-02-25 14:29:09
使用mod_rewrite和H=标志。在.htaccess中,如果在标志中设置H=,则使用-作为替代。然后,您可以在RewriteCond中进行IP检查。
这是一些(未经测试的)实现这一目标的代码:
# 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]发布于 2012-02-25 17:41:08
不幸的是,Apache对条件配置的支持非常有限。除了在内部具有条件计算的特定模块(如mod_rewrite )之外,您仅限于、,而且我相信还有一种方法可以根据文件或目录的存在启用指令。
IfDefine允许您根据启动时通过-D定义的变量启用配置。
httpd -Dstaging或者您可以使用Define:
Define staging staging不幸的是,IfDefine只计算变量是否已定义,而不是其值。尽管你不能在你的配置中有条件地定义它,所以这并不是什么损失。
因此,如果在生产服务器和暂存服务器上启用了不同的模块,或者使用自定义配置变量启动暂存服务器,则这将是您的解决方案。
否则,我想我们将不得不等待某个人创建允许我们执行的mod_if的那一天:
DefineIf Server_Addr "127\.0\.0\.1" env=staging:production
<If env=staging>
AddHandler foo-handler .foo
</If>https://webmasters.stackexchange.com/questions/22738
复制相似问题