我断食约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 Repository中保留一个.htaccess文件,该文件在两个位置都可用。
首先,让我清除/总结所学到的所有东西,同时在互联网上寻找使用IfDefine和SetEnv解决这个问题的方法;
- Apache中的IfDefine指令,仅当且仅当我说只是我的意思是,只响应在命令行传递的参数。让我稍微强调一下。只有命令行!
- SetEnv和SetEnvIf是两个完全不同的东西。一个(SetEnv)用于conf文件,设置在SERVER START TIME设置的环境变量(特定于apache)。 SetEnfIf用于REQUEST TIME,仅用于根据REQUEST变量确定要设置的内容。
- IfDefine指令不读取由SetEnv或SetEnvIf设置的变量。期。没有争论,没有问题,没有“但我想......”否。它没有,所以克服它。
简短的回答是否定的,你不能只用“SETENV DEV 1”在httpd.conf,然后使用IfDefine来检测它在你的.htaccess文件,这将基于语法看起来直观合理以及我们任何人都习惯的编程逻辑的本质。回想一下,我们实际上并没有对任何东西进行编程,这些都是配置文件,当然,它们不符合这种期望,仅仅因为它看起来应该是这样。
答案
因此,这意味着我必须弄清楚如何将启动参数添加到Apache,以及用于Linux专家,答案是现成的,你只需要添加正确的东西到envvars文件,但我们怎么样差windows瘾君子?
那么对于Windows用户来说,它变得更有趣,原因如下:
- Windows不允许你永久在APACHE2.2服务配置中添加启动参数(这是行不通的,不要”试试吧,我已经做了100万次,相信我)。这是真的,如果你进入并尝试输入你自己的参数,它将只会工作一次,然后在下次打开对话框时参数字段为空。我不知道为什么会出现这种情况,但似乎这些参数是用于测试的,而不是永久性的修改。
- 当安装Apache时,它会在开始菜单中创建“开始”,“停止”和“重新启动”快捷方式,并安装Apache服务监视器。但是开始菜单中的快捷方式使用的启动参数不同于apache服务监视器使用的启动参数。所以如果你使用这些方法的组合来启动/停止apache,你将得到不同的结果,这取决于你使用的是什么方法。但是,您可以将-D“__DEV__”放入开始菜单快捷方式中,它将起作用!
的措施来解决它
要永久和普遍建立一个__DEV__环境变量,你可以在.htaccess文件参考使用IfDefine,在Windows开发环境,将工作无论你使用Apache一个开始服务或者在开始菜单或使用NET START快捷方式/ STOP在命令行中,执行以下操作:
打开的开始菜单快捷方式的属性,并提取您找到,起始于A命令在那里吃饭。我是; “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软件基金会\ APACHE2.2 \斌\ httpd.exe” -D “__DEV__” -w -n “APACHE2.2” -k开始
你开始菜单快捷方式现在将启动Apache并使用您的dev变量。
进入命令行(如管理员)
类型:净停止APACHE2.2(或任何你的服务名称是Apache)
现在键入(或复制粘贴)与上面的开始菜单快捷方式中使用的相同的命令到命令行中,但对其进行以下更改; “C:\ Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ bin \ httpd.exe”-D“__DEV__”-w -n“Apache2.2”-k config
- 请注意更改字开始到配置。这个神奇的命令所做的就是将您在屏幕上看到的设置保存到与Windows中的服务一起存储的设置中。按Enter键。从这一点开始,只要您启动服务,Apache服务监视器启动服务或Windows启动服务,您的变量就会被传递。
对不起,对于每个人来说,我希望它可以帮助一些其他疲惫的灵魂在那里有所有这些信息总结和解释,我知道它会帮助我! :D
我想一个更好的答案是:http://stackoverflow.com/questions/6143176/how-can-i-password-protect-dev-but-not-live-while-using-svn – mikevoermans