需要针对从Git仓库部署到测试和生产站点的不同情况使用不同的.htaccess文件

8
这里是情景描述:
有一个Git仓库,跟踪网站文件,包括根目录下的`.htaccess`文件。该Git仓库被检出到了一个测试站点和一个生产站点。
问题是:测试站点必须通过htpasswd认证进行保护。这也会更改`.htaccess`文件。现在从测试环境提交或推送意味着`.htaccess`文件(启用根目录密码保护)将被检出到实时网站上,导致实时网站也要求密码。
现在我该怎么做?应该停止跟踪`.htaccess`文件吗?应该通过post-receive hook覆盖`.htaccess`文件(可能吗?如何操作)?还有其他方法可以保护目录而不修改`.htaccess`文件吗?有其他解决方案吗?
4个回答

6
我建议不要追踪.htaccess文件本身。
可能的选项如下:
  1. 跟踪.htaccess-prod.htaccess-stage(如果有更多的差异,比如各种配置设置、密码等,则更有用;如果只有一行,那么这可能不是最佳选择)。每当您更新某些内容时,必须在两个文件中都进行更新,还必须记住在两个环境中手动复制文件作为.htaccess

  2. 仅存储一个文件.htaccess-example,在暂存和生产区域中添加钩子(可能会查看post-checkout和/或post-merge [1]),它们将在每次更改时,在两个区域中将.htaccess-example复制为本地的.htaccess,并在暂存中附加一行密码保护。

[1] 我自己还没有使用过它们,所以看文档有点困惑。关于post-receive,据我所知,当推送到远程repo时,在工作副本中拉取时不会执行它。


是的,选项1似乎是最可行的。只有一个问题:如果被机器人/用户请求,Apache不会在浏览器中提供.htaccess-prod/stage,对吧? - Sawant
是的,这是一个重要的问题。默认情况下,它可能会为他们提供服务。但你需要确定它不会在 .htaccess 文件本身中实现 :) 这个链接可能会有所帮助:http://www.ducea.com/2006/07/21/apache-tips-tricks-deny-access-to-certain-file-types/ - jakub.g

2
这里有一个非常创新的解决方案:在开发过程中,为.htaccess文件设置自定义文件名,并且不要将其提交。例如,可以将其命名为.htaccess-dev或.htaccess.staging。
您可以在虚拟主机配置中进行此设置。
如果您使用MAMP Pro,则可以为每个本地域设置vhost配置。
参考链接:http://www.electrictoolbox.com/change-htacces-filename-apache/

2

如果使用Git(与Mercurial相反),你只有一种解决方案:分支

你需要使用不同的分支来进行暂存和生产环境,唯一不同的是 .htaccess 数据。虽然不是非常可靠,需要很多手工操作,但这是你的选择


是的,我认为选择必须缩小到分支或停止跟踪 .htaccess。 - Sawant
我不确定在这里拥有两个分支是否是最好的解决方案 - 因为你在两个分支中都有相同文件的不同版本,所以这意味着对于所有未来的提交,你将不得不将第二个分支重新基于第一个分支进行变基,因为你将无法快进更改。 - jakub.g

-2

对于部署,我推荐使用Capistrano,它是一个非常好用的工具。


我知道Capistrano。但我正在寻找一个特定于Git的解决方案。 - Sawant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接