gpt4 book ai didi

Apache .htaccess - 根据环境或主机名有条件地应用基本身份验证

转载 作者:行者123 更新时间:2023-12-03 23:04:20 25 4
gpt4 key购买 nike

我的开发设置:Mac OSX 10.7.4/Apache 2.2.21/PHP 5.3.10

我希望根据开发环境与实时环境将条件逻辑添加到我的 .htaccess 文件中。例如,我想在实时服务器上进行身份验证,而不是在开发服务器上进行身份验证。我有我的 httpd.conf
SetEnv DEV 1
我已经通过检查 的输出确认设置了这个变量。 phpinfo() .然后在我的 .htaccess 文件

<IfDefine !DEV>
AuthType Basic
AuthName "password protected"
AuthUserFile /path/to/.htpasswd
Require valid-user
</IfDefine>

...但我的本地开发人员仍然提示我输入密码。看来 DEV变量不可用于 .htaccess .我有 AllowOverride All设置在我的 httpd.conf对于我的文档根。有任何想法吗?

最佳答案

我刚刚解决这个问题大约 4 个小时,我相信我有了最终的答案,并且可以为大家总结如何解决这个特别痛苦的问题。

我使用 Windows 7 Home Premium 和 Apache 2.2x 和 PHP 5.3 作为我的开发机器。
我也想拥有一个 开发部 环境变量,我可以在我的 .htaccess 文件中使用它来关闭重写和其他在我的开发环境中无效但对我的生产环境至关重要的指令。

我的 .htaccess 文件看起来像这样;

<IfDefine !__DEV__>
AddType application/x-httpd-php53 .php
</IfDefine>

HostGator 告诉我,为了拥有 php 5.3,我需要像这样修改我的 htaccess 文件以启用它,否则我只有 php 5.2。但是我已经在我的开发机器上安装了它,所以当我在本地查看它时,这个指令导致我的客户网站崩溃。我将要解释的所有内容都允许我在我的 Git 存储库中保留一个 .htaccess 文件,该文件在两个位置都可以使用。

首先,让我清理/总结一下我在网上搜索使用IfDefine和SetEnv解决这个问题的方法时学到的所有东西;
  • Apache 中的 IfDefine 指令, Only , ONLY 以及当我说 only 我的意思是 ONLY 时,响应在命令行传递的参数。让我稍微强调一下。只有命令行!
  • SetEnv 和 SetEnvIf 是两个完全不同的东西。一个 (SetEnv) 用于 conf 文件,设置在 SERVER START TIME 设置的环境变量(特定于 apache)。 SetEnfIf 在 REQUEST TIME 使用,仅用于根据 REQUEST 变量确定要设置的内容。
  • IfDefine 指令不读取由 SetEnv 或 SetEnvIf 设置的变量。时期。没有争论,没有问题,没有“但我认为……”不。它没有,所以克服它。

  • 简短的回答是否定的,您不能只在 httpd.conf 中使用“SetEnv DEV 1”,然后使用 IfDefine 在您的 .htaccess 文件中检测它,根据编程逻辑的语法和性质,这似乎是直观和合理的我们习惯了。回想一下,我们实际上并没有编程任何东西,这些是配置文件,当然它们不符合这种期望仅仅是因为它们看起来应该如此。

    答案

    所以这意味着我必须弄清楚如何向 Apache 添加启动参数,对于 Linux 专家来说,这个答案很容易找到,你只需要向 添加正确的内容即可。环境变量 文件,但我们可怜的人怎么办 window 瘾君子?

    对于 Windows 用户来说,它变得更有趣,原因如下:
  • Windows 不允许您在 Apache2.2 的服务配置中永久添加启动参数(它不起作用,不要尝试,我已经做过一百万次了,相信我)。确实如此,如果您进去尝试输入自己的参数,它只会工作一次,然后下次打开对话框时参数字段为空。我不知道为什么会这样,但似乎这些参数是用于测试的,而不是永久修改。
  • 安装 Apache 后,它会在开始菜单中创建“开始”、“停止”和“重新启动”快捷方式,并安装 Apache 服务监视器。 但是 开始菜单中的快捷方式使用的启动参数与 apache 服务监视器使用的启动参数不同。因此,如果您使用这些方法的组合启动/停止 apache,您将获得 不同的结果 取决于您使用的方法。但是,您可以将 -D "__DEV__"放在开始菜单快捷方式中,它会起作用!

  • 解决步骤

    要永久和普遍地设置一个 __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 开始
  • 修改它以包含新的 -D __DEV__ 变量,该变量必须紧跟在 httpd.exe 之后; "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -D "__DEV__" -w -n "Apache2.2"-k 开始
  • 您的开始菜单快捷方式现在将使用您的 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 配置
  • 注意这个词的变化开始 配置 .这个神奇命令的作用是将您在屏幕上看到的设置保存到 Windows 中与服务一起存储的设置中。按回车键。从现在开始,您的变量将在您启动服务、Apache 服务监视器启动服务或 Windows 启动服务时传递。

  • 对不起大家的小说,我希望它可以帮助其他一些疲惫的灵魂总结和解释所有这些信息,我知道它会帮助我! :D

    关于Apache .htaccess - 根据环境或主机名有条件地应用基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073752/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com