【问题标题】:Htaccess separate for Localhost and Production本地主机和生产的 Htaccess 分开
【发布时间】:2021-11-20 14:19:37
【问题描述】:

如何创建一个 Htaccess,它将为 Localhost 和 Production 提供一个特定且单独的代码。我的意思是当我们在本地主机上工作时,它应该是本地主机代码,而在生产中它应该只加载生产代码。这样我就可以将一个 Htaccess 用于本地和生产,这将节省大量时间。以下是我想要实现的模型。任何人都可以在这方面提供帮助,我们将不胜感激。因为我花了很多时间在上面,但没有找到任何好的方法。提前致谢!

<Localhost>
---localhost code goes here 
---it should be only work in localhost and not at all in Production
</localhost>

<Production>
---production code goes here 
---it should be only work in Production and not at all in Localhost
</Producton>

【问题讨论】:

  • 这不是分布式配置文件背后的想法。这些文件旨在解决应用程序的内部要求。一般的、特定于域的设置应该在 http 服务器的主机配置中完成。如此集中,而不是分布式。将特定于域的规则和特定于应用程序的规则区分开来很重要。
  • 只是出于好奇:你为什么需要它?这不会使调试变得更加困难吗?哪些部分应该真正不同?
  • @NicoHaase 当我使用 Htaccess 设置 HTTPS 时,我只需要在生产环境中使用它,因为它会在 localhost 中显示错误。此外,我不需要在本地主机中进行 htaccess 缓存,但在生产中需要。希望你能理解我的困难。我希望任何人都可以提出这个解决方案,这对我们所有人来说都是一个有价值的解决方案。因为一旦解决了这个问题,我们就不应该太关心 htaccess 了。
  • 为什么不在核心Apache配置中配置HTTPS呢?

标签: .htaccess localhost production


【解决方案1】:

.htaccess 中的大部分代码在本地和生产环境中应该是相同的。 (不然怎么测试?)

但是,在服务器之间分隔指令的最简洁方法之一是 Define(需要 Apache 2.4)在其中一台服务器(例如开发机器)的服务器配置中的变量:

Define DEVELOPMENT

这可以在服务器配置中的任何地方定义(不是.htaccess),但始终被视为服务器的全局,无论它是否在&lt;VirtualHost&gt; 容器内定义.您不需要指定 value(第二个)参数,因为 &lt;IfDefine&gt; 指令(见下文)不会检查这一点。与往常一样,每当您更改服务器配置时,您都需要重新启动 Apache 以使更改生效。

并在.htaccess 中引用此内容:

<IfDefine DEVELOPMENT>
    # Local / development directives only
</IfDefine>

<IfDefine !DEVELOPMENT>
    # Live / production directives only
</IfDefine>

! 前缀测试变量是否定义。

根据您需要包含的指令类型,您可以使用&lt;If&gt; 容器并检查请求的主机名之类的内容(例如,staging.example.comwww.example.com 的实时站点)。但是,&lt;If&gt; 容器与 mod_rewrite 的工作方式不同。

参考:

【讨论】:

  • 感谢您的回答。我尝试了以下方法,但它不起作用。让我知道我是否错了。 # 本地 DirectoryIndex category.php # 远程 DirectoryIndex subcategory.php
  • @RenJitsm 您是否在服务器配置中定义了变量(不是 .htaccess)并重新启动了 Apache?
  • 我对PHP不是很熟悉,你能分享一下如何做吗?我的只是一个 Core Php 项目,没有任何配置。
  • @RenJitsm 这个跟PHP没关系,一直都是Apache。在您的 Apache 服务器配置文件或定义站点的 &lt;VirtualHost&gt; 容器中(尽管 define's 始终是 global),您需要指令 Define DEVELOPMENT 来实际定义那个变量。 (名称DEVELOPMENT 只是一个建议,如果您愿意,您可以决定将其称为STAGINGLOCAL。仅按约定大写。)对服务器配置进行更改后,您需要重新启动 Apache 以进行更改生效。
  • 它有效!你太棒了。我希望我可以通过在此处添加评论来向您提出疑问。让我知道任何其他获得您支持的方法。这不仅对我有帮助,对所有开发人员都有帮助。非常感谢您的出色帮助!。
猜你喜欢
  • 2014-07-13
  • 2015-08-08
  • 2020-07-02
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
相关资源
最近更新 更多