多种环境中的.htaccess

2024-04-12

我知道以前曾有人问过类似的问题,但我还没有找到适合我的情况的任何真正具体的答案。

我有一个在多个环境(本地、开发、生产)上运行的 ExpressionEngine 站点,每个环境都需要不同的 .htaccess 规则:

所有环境

  • 删除index.php http://expressionengine.com/user_guide/general/remove_index.php.html
  • 设置 404 文件
  • 设置 301 重定向

发展

  • 使用 .htpasswd 进行密码保护
  • 强制使用 HTTPS 协议
  • 防止搜索引擎索引X-机器人标签 http://yoast.com/prevent-site-being-indexed/

生产

  • 强制使用 HTTPS 协议
  • 将非 www 子域重定向到 www

Local

  • 没有独特的规则。

我见过很多关于如何为每个模块设置特定环境的示例。喜欢RewriteCond %{REQUEST_HOST} ^dev.myurl.com对于 mod_rewrite 模块,以及像这样的技巧 http://css-tricks.com/snippets/htaccess/allow-single-url/满足 .htpasswd 要求。

但我真正更喜欢的是某种方法来设置全局环境变量,然后在每个环境的 .htaccess 文件中重新使用这些变量。以伪 javascript 为例,如下所示:

var local = 'mysite.local';
var development = 'dev.mysite.com';
var production = 'www.mysite.com';

// Global .htaccess rules

if(environment == local){
   // Local environment .htaccess rules
}

if(environment == development){
   // Development environment .htaccess rules
}

if(environment == production){
   //Production envirotnment .htaccess rules
}

这样,所有特定于环境的规则都组合在一起,形成一个非常干净的文件,并且如果环境发生更改,则只需要更改一个变量。

我见过一些关于更改 Apache 配置文件中的设置的参考,但显然,如果我处理的是第 3 方主机,这不是一个可行的选择。

那么这是天上掉馅饼的痴心妄想,还是可以实现呢?


乔恩的回答很好。不幸的是,并非所有 Web 主机都允许您控制用于启动 Apache 的 -D 参数。

以下是在开发和生产中使用单个 htaccess 文件的方法,但仅对开发站点进行密码保护:

# ----------------------------------------------------------------------
# Password protect staging server
# Use one .htaccess file across multiple environments
# (e.g. local, dev, staging, production)
# but only password protect a specific environment.
# ----------------------------------------------------------------------

SetEnvIf Host staging.domain.com passreq
AuthType Basic
AuthName "Password Required"
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Order allow,deny
Allow from all
Deny from env=passreq
Satisfy any
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多种环境中的.htaccess 的相关文章

随机推荐