【问题标题】:Need different .htaccess for staging and live site from Git repo需要不同的 .htaccess 来从 Git 存储库进行登台和实时站点
【发布时间】:2012-11-17 13:26:49
【问题描述】:

这是场景:

有一个 Git 存储库,用于跟踪网站文件,包括根目录下的 .htaccess。将 Git 存储库签出到暂存站点和生产站点。

问题: 临时站点必须使用密码保护(通过 htpasswd 身份验证)。这也会更改.htaccess 文件。现在从暂存环境提交或推送意味着.htaccess 文件(为根目录启用密码保护)也被检出到实时网站,使实时网站也要求输入密码。

现在我该怎么做呢?我应该停止跟踪.htaccess 吗?我应该通过接收后挂钩覆盖.htaccess(可能吗?如何?)?有没有其他方法可以在不修改.htaccess 的情况下保护目录?还有其他解决方案吗?

【问题讨论】:

    标签: git .htaccess deployment


    【解决方案1】:

    我会选择不跟踪 .htaccess 本身。

    可能的选择:

    1. 跟踪.htaccess-prod.htaccess-stage(如果有更多差异,比如各种配置设置、密码等,如果它只有一行,那么它可能不是最佳选择,则更有用)。然后,每当您更新某些内容时,您必须在两个文件中都这样做,而且您必须记住在两个环境中将文件复制为 .htaccess,当它们发生变化时手动复制它们。

    2. 只存储一个文件.htaccess-example,在暂存区和活动区添加挂钩(查看post-checkout 和/或post-merge 可能 [ 1])这将在它们两个中复制.htaccess-example作为本地.htaccess,只要有更改,另外,在暂存中附加一个带有密码保护的行。

    [1] 我自己还没有使用过它们,所以我在查看文档时有点困惑。关于post-receive,据我了解,它是在推送到它时在 remote repo 上执行的,而不是在拉取时在工作副本中执行。

    【讨论】:

    • 是的,选项 1 似乎是最可行的。只有一个问题:Apache 不会在浏览器中提供 .htaccess-prod/stage(如果机器人/用户请求),对吧?
    • 是的,这是一个重要的问题。默认情况下,它可能为他们服务。您需要确定它不会在 .htaccess 本身中 :) 这可能会有所帮助:ducea.com/2006/07/21/…
    【解决方案2】:

    如果是 Git(与 Mercurial 相反),您只有一个解决方案:分支

    您必须为 Staging 和 Live 使用不同的分支,但内容有一个区别:.htaccess 数据。不是防弹的,需要大量手工操作,但是 - 这是您的选择

    【讨论】:

    • 是的。我认为选择必须归结为分支或停止跟踪.htaccess。
    • 我不确定是否有两个分支是最好的解决方案 - 你在两个分支中都有不同版本的同一个文件,所以这意味着对于所有未来的提交,你必须重新设置第一个分支之上的第二个分支,因为您将无法快进更改。
    【解决方案3】:

    这是一个外在的答案:在 Dev 上为 .htaccess 文件设置一个自定义文件名,不要将其签入。例如,.htaccess-dev 或 .htaccess.staging。

    您可以在 vhosts 配置中进行设置。

    http://www.electrictoolbox.com/change-htacces-filename-apache/

    如果您使用 MAMP Pro,您可以为每个本地域设置虚拟主机配置。

    【讨论】:

      【解决方案4】:

      对于部署我推荐capistrano,它是一个漂亮的实用程序。

      【讨论】:

      • 我知道 Capistrano。但我正在寻找特定于 Git 的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2016-09-18
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多