我知道以前曾有人问过类似的问题,但我还没有找到适合我的情况的任何真正具体的答案。
我有一个在多个环境(本地、开发、生产)上运行的 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(使用前将#替换为@)