如果存在.htaccess文件,请使用其他替代方法?

时间:2019-02-17 19:39:28

标签: apache .htaccess filenames httpd.conf

背景:我曾经使用环境变量来区分开发和生产服务器,在.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)。

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

1 个答案:

答案 0 :(得分:0)

您可以在AccessFileName中指定多个文件,因此可以执行以下操作:AccessFileName .htaccess.dev .htaccess

.htaccess.dev相比,此方法更喜欢.htaccess,如果.htaccess不存在,则使用.htaccess.dev

但是,在我看来,如果您必须根据环境自定义.htaccess,则您做错了事:)

使用工作示例进行更新:

如果将AccessFileName .htaccess.dev .htaccess放入Apache配置中(如虚拟主机一样,它将正常工作):

# 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