【问题标题】:Use alternative to .htaccess file if it exists?如果存在 .htaccess 文件,请使用它的替代方法?
【发布时间】:2019-07-11 05:25:20
【问题描述】:

背景:我曾经使用环境变量来区分我的开发服务器和生产服务器,在 .htaccess 中使用它:-

<IfDefine DEV_SERVER>
  # dev server specific stuff here
</IfDefine> 

<IfDefine !DEV_SERVER>
  # production server specific stuff here
</IfDefine>

环境变量“DEV_SERVER”只在我的开发服务器上设置过,显然从来没有在生产上设置过。

在我的生产服务器主机安装 Litespeed 作为 Apache 的替代品之前,这种方法很有效。 Litespeed 不喜欢上述内容,并且忽略了所有内容。

我尝试为开发和生产使用不同版本的 .htaccess 文件,但这既麻烦又危险,我希望能够随时在两者之间交换所有文件。

我的开发服务器运行 Apache 2.4,我没有计划更改它。我读到您可以通过将其放在 httpd.conf 中为 .htaccess 指定不同的文件名:-

AccessFileName .htaccess.dev

这已经完成了一半——现在我可以拥有一个 .htaccess.dev 文件,只有我的开发服务器会使用它来代替 .htaccess。但理想情况下,我希望开发服务器:-

  1. 如果仅此而已,请使用 .htaccess
  2. 如果仅此而已,请使用 .htaccess.dev
  3. 如果 .htaccess 和 .htaccess.dev 都存在,则使用 .htaccess.dev

它有(2)和(3),但不幸的是没有(1)。

有什么解决办法吗?任何帮助都非常感谢,一如既往!

【问题讨论】:

    标签: apache .htaccess filenames httpd.conf


    【解决方案1】:

    您可以在AccessFileName 中指定多个文件,这样您就可以:AccessFileName .htaccess.dev .htaccess

    这样做的目的是优先使用.htaccess.dev 而不是.htaccess(如果存在),如果.htaccess.dev 不存在则使用.htaccess

    但是,在我看来,如果您必须为每个环境自定义 .htaccess ,那么您做错了 :)

    更新工作示例:

    如果您将 AccessFileName .htaccess.dev .htaccess 放入您的 Apache 配置中(例如 vhost,它将正常工作):

    # curl -sI http://example.com/test.html | grep "x-htaccess"
    x-htaccess: dev
    # mv .htaccess.dev htaccess.dev
    # curl -sI http://example.com/test.html | grep "x-htaccess"
    x-htaccess: default
    

    .htaccess 的内容是Header set x-htaccess default,.htaccess.dev 的内容是Header set x-htaccess dev

    【讨论】:

    • 我不认为是这种情况,因为我首先尝试过(假设它可能与 DirectoryIndex 类似)但它不起作用。我在本地服务器上开发站点,因为它更容易,并且此设置并不总是与现场设置相同。它以这种方式为我工作了 12 年多。只是做事的方式有时会有些细微的差别。
    • 我已经用一个工作示例@JohnA 更新了帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2014-07-20
    • 1970-01-01
    • 2019-08-11
    • 2015-10-31
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多