Dev*_*mke 13 apache .htaccess ifdefine
我的开发设置:Mac OSX 10.7.4/Apache 2.2.21/PHP 5.3.10
我希望根据dev vs live环境为我的.htaccess文件添加条件逻辑.例如,我想在实时服务器上进行身份验证,但不在开发服务器上进行身份验证.我有我的httpd.conf
SetEnv DEV 1
我已经确认通过检查phpinfo()的输出来设置此var .然后在我的.htaccess文件中
<IfDefine !DEV>
  AuthType Basic
  AuthName "password protected"
  AuthUserFile /path/to/.htpasswd
  Require valid-user
</IfDefine>
...但我的本地开发仍然提示输入密码.似乎该DEV变量不可用.htaccess.我确实AllowOverride All设置了我httpd.conf的doc doc.有任何想法吗?
小智 22
我刚刚解决了这个问题大约4个小时,我相信我有最后的答案,可以总结一下每个人如何解决这个特别痛苦的问题.
我使用Windows 7 Home Premium与Apache 2.2x和Php 5.3作为我的开发机器.我也想拥有一个DEV环境变量,我可以在我的.htaccess文件中使用它来关闭重写和其他指令,这些指令在我的开发环境中无效但对我的生产环境至关重要.
我的.htaccess文件看起来像这样;
<IfDefine !__DEV__>
    AddType application/x-httpd-php53 .php
</IfDefine>
HostGator通知我,为了拥有php 5.3,我需要修改我的htaccess文件,这样才能启用它,或者我只有php 5.2.但是我已经把它放在我的开发机器上了,因此,这个指令导致我的客户网站在本地查看时崩溃了.我要解释的所有内容都允许我在我的Git存储库中保留一个.htaccess文件,该文件在两个位置都有效.
首先,让我清楚/总结我在浏览互联网时学到的所有东西,以便使用IfDefine和SetEnv来解决这个问题;
简短的回答是NO,您不能只在httpd.conf中使用"SetEnv DEV 1",然后使用IfDefine在.htaccess文件中检测它,根据编程逻辑的语法和性质,这看起来很直观和合理.我们习惯了.回想一下,我们实际上并没有编程任何东西,这些是配置文件,当然它们不符合这种期望,仅仅因为它看起来应该如此.
答案
所以这意味着我必须弄清楚如何向Apache添加一个启动参数,对于Linux Guys来说,答案很容易获得,你只需要在envvars文件中添加正确的东西,但是我们糟糕的windows junkies呢? ?
对于Windows用户来说,由于以下原因,它会变得更有趣:
解决它的步骤
要永久和普遍地设置__DEV__环境变量,您可以在.htaccess文件中使用IfDefine引用,在Windows开发环境中,无论您是使用服务启动Apache还是使用开始菜单中的快捷方式或使用NET START/STOP,命令行,执行以下操作:
打开开始菜单快捷方式的属性,然后解压缩在那里启动Apache的命令.我是; "C:\ Program Files(x86)\ Apache Software Foundation\Apache2.2\bin\httpd.exe"-w -n"Apache2.2"-k start
修改它以包含新的-D __DEV__变量,该变量必须在httpd.exe之后立即开始; "C:\ Program Files(x86)\ Apache Software Foundation\Apache2.2\bin\httpd.exe" -D"__DEV__"- w -n"Apache2.2"-k start
您的开始菜单快捷方式现在将使用您的dev变量启动apache.
转到命令行(以管理员身份)
键入:net stop apache2.2(或者apache的任何服务名称)
现在,在上面的开始菜单快捷方式中输入(或复制 - 粘贴)与命令行相同的命令,但对其进行以下更改; "C:\ Program Files(x86)\ Apache Software Foundation\Apache2.2\bin\httpd.exe"-D"__DEV__"-w -n"Apache2.2"-k config
对不起小说的每一个人,我希望它可以帮助其他一些疲惫的灵魂将所有这些信息汇总和解释,我知道它会帮助我!:d
我的第一个答案的另一个选择是使用Allow指令.
请看:http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow
Order deny,allow
Deny from all
AuthType Basic
AuthName "password protected"
AuthUserFile /path/to/.htpasswd
Require valid-user
Allow from env=DEV
Satisfy Any
这只会检查DEV是否不存在值,这就是apache的工作原理.用"允许来自127.0.0.1"替换(或添加)"允许"以使本地主机始终处于开发模式.
这表明任何条件都是可以接受的,条件是:password或127.0.0.1.如果您在本地主机上进行开发,则可以使用127.0.0.1,或者将其替换为您开发的任何ip.这不需要包含在任何内容中,只需放在htaccess文件中即可.我使用虚拟主机,所以我会把它放在那里.
来源(我将其更改为您的原始代码):http: //www.askapache.com/htaccess/apache-authentication-in-htaccess.html#allow-conditional
我确实喜欢回答问题,但快速的谷歌搜索给了我你的答案。查看 apache 文档: http://httpd.apache.org/docs/2.0/mod/core.html#ifdefine
该IfDefine指令只能测试“parameter-name”,而“parameter-name”是httpd在启动时设置的变量。
另请查看此网站,然后向下滚动到表格: http://turboflash.wordpress.com/2010/05/27/apache-environment-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/
如果您像这样启动开发网络服务器,您所要求的仍然是可能的:
$ httpd -DDEV
这将定义变量DEV。请注意,您不需要将其设置为任何内容,定义基本上是将其设置为 1/true。如果它不存在,就像被设置为 false/0/null/等等...
| 归档时间: | 
 | 
| 查看次数: | 11287 次 | 
| 最近记录: |