在生产环境中跟踪的.htaccess文件,不希望在开发环境中使用生产环境的.htaccess文件。

3
如果这是重复的问题,请将其标记为重复。另外,我不确定这是否是基于观点的问题。我的谷歌搜索没有返回任何与我的困境相关的东西,而且我也不确定我应该搜索什么。( 12 )
我的问题是如何保持在git中跟踪的生产 .htaccess 文件不会干扰我的开发环境的Web服务器。
我的git部署设置的简要描述: 本地机器(dev)-> Bitbucket -> 生产
生产环境位于共享主机上,因此我无法直接从dev推送到production,必须使用Bitbucket作为中介。
我的开发环境: 我在本地使用Vagrant作为我的开发环境,它使用Apache作为其Web服务器。 vagrantbox设置脚本应用 httpd.conf 文件中的更改以设置 VirtualHost DocumentRoot DirectoryIndex

这在过去对我来说运作得很好。

在生产环境中,也使用了Apache。我最初没有在git中跟踪.htaccess文件,但最近有一个改变(从HTTP重定向到HTTPS),让我决定开始跟踪它。现在我的问题是,在开发目录下会拉取生产的.htaccess文件,并影响我的开发Web服务器。

我想到了几个主意:

  1. 创建一个单独的git repo来跟踪生产中的.htaccess文件,不加入Bitbucket或开发环境,但我觉得这很复杂。
  2. 创建一个分支来跟踪.htaccess文件,但我预见这会让我感到混乱,因为我将在生产和开发环境之间来回切换分支,并且很可能会弄错一些东西。
  3. 我放弃跟踪.htaccess文件,但这似乎会是以后灾难的导火索。

是否有其他方法可以解决这个问题?或者我应该使用我想到的其中一种方法?

3个回答

2
分支方法可能是个好主意,可以创建一个开发分支,其中不包含 .htaccess 文件,还可以有一个生产环境分支,像 master 分支一样进行跟踪。这样当你的某些代码准备好投入生产环境时,只需要将其合并到 master 分支即可。

我注意到楼主的问题晚了两分钟 - 你先回答了 :). 对于这种情况,“分支”(例如“dev”)可能是理想的。回答楼主的疑虑 - 没有必要让事情变得“混乱”。在CI/CD环境中,使用分支可能会更清晰 - paulsm4
1
我之前没有考虑到这一点。我正在使用这个项目,它相当不重要,所以我一直在直接提交到 master 分支,只有在我正在完成但还没有准备好投入生产的功能时才会创建分支。那么我应该在本地创建一个 development 分支并删除 master 分支。Bitbucket 将同时拥有 developmentmaster 分支,我可以将 development 分支合并到 Bitbucket 上的 master 分支,然后从生产环境中拉取 master 分支。这样听起来正确吗? - Tiffany
完全正确。你甚至可能不需要合并。当然,另一种可能性是有两个文件:一个用于生产环境,另一个用于开发环境。你可以保存两个文件,但将它们放在不同的目录下(/prod/.htaccess、/dev/.htaccess)或者给它们不同的名称(.htaccess.prod、.htaccess.dev)。 - paulsm4

2
另一个答案可能是您正在寻找的答案,但是在不更改版本控制的情况下可能有几个替代方案... 如果您的本地开发环境根本不使用.htaccess,则可以在服务器配置中禁用此功能,那么无论prod .htaccess文件是否存在都没有关系。
<Directory /path/to/public_html>
    # Disable .htaccess files...
    AllowOverride none
</Directory>

如果您需要在生产环境和开发环境中都使用.htaccess,但有一些不同的指令,那么您可以在.htaccess文件中包含条件语句。您可以通过多种方式实现这一点,其中一种方法是在开发服务器的服务器配置中定义变量,并在.htaccess中检查该变量。
例如,在服务器配置中:
Define DEV

.htaccess文件中:
<IfDefine DEV>
    # Development server directives...
</IfDefine>

<IfDefine !DEV>
    # Production server directives...
</IfDefine>

请注意第二个规则块前缀中的 ! (not)。

1
我更喜欢这种方法,而不是保留两个分支,但在git中拥有两个分支可能是解决问题的正确方式。我在git中管理分支和远程主机方面遇到了麻烦,我可以看到自己意外地覆盖dev中的某些内容,这将需要我进行大量的工作和文件操作来修复。 - Tiffany
是的,我同意,尽管“正确”可能是主观的 - YMMV。我经常在.htaccess中使用单个条件来区分实时/开发服务器,因为两者之间可能只有一个小路径差异,并且通常更容易在同一文件中维护它们。 - MrWhite

0

我遇到了完全相同的问题...目前我正在做的是将我的工作开发目录保留在/var/www/site [dev]/下,但我已经gitignore了.htaccess文件以及其他任何仅用于开发的文件。然后,我在旁边保留第二个目录/var/www/site [prod]/,其中包含我想要在生产服务器上使用的所有变体。因此,我从[dev]提交和推送,再从[prod]拉回并从那里部署。我的意思是,它可以工作-但感觉应该有一个行业标准来处理这样的事情,这就是为什么我来到这里的原因。但无论如何,我想如果它能工作,那就行了。耸耸肩


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