.htaccess - htaccess 中域名特定的代码块

标签 .htaccess

我们有本地服务器、中央开发、登台和生产服务器。然而,由于显而易见的原因,开发和登台受到密码保护。因此,在对 htaccess 进行任何更改后,我必须手动编辑 htaccess 文件以在开发和登台服务器上启用密码保护。

有没有办法根据域名进行条件 block ,例如:

if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){
  AuthName "Password Protected Area"
  AuthType Basic
  AuthUserFile /somewhere/.htpasswd
  Require valid-user
}

我需要找到与该条件等效的 htaccess:

if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){

}

非常感谢你们能够提供的任何帮助或指示。

最佳答案

虽然通过 VirtualHost 而不是 .htaccess 来完成此操作要好得多,但如果 setenvif 模块处于事件状态,您可以使用以下解决方案:

SetEnvIf Host ^dev\.site\.com$ is_on_dev_site
SetEnvIf Host ^staging\.site\.com$ is_on_dev_site
Order deny,allow
Deny from env=is_on_dev_site
# require password if access would otherwise be denied
Satisfy any
# Put your password auth stuff here

您还可以使用白名单,这可能会更好,因为它可以确保您的开发网站仍然受到保护,即使有人决定允许通过 www.dev.site.com 等访问它们:

SetEnvIf Host ^site\.com$ is_on_public_site
SetEnvIf Host ^www\.site\.com$ is_on_public_site
Order deny,allow
Deny from all
Allow from env=is_on_public_site
Satisfy any
# Put your password auth stuff here

如果您的服务器上没有 mod_setenvif,mod_rewrite 也可以为您完成这项工作(将白名单示例中的 SetEnvIf block 替换为以下内容):

RewriteEngine On
RewriteCond %{HTTP_HOST} =site.com
RewriteRule ^ - [E=is_on_public_site:yes]
RewriteCond %{HTTP_HOST} =www.site.com
RewriteRule ^ - [E=is_on_public_site:yes]

关于.htaccess - htaccess 中域名特定的代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4068975/

相关文章:

php - 如何创建类似于 Pastebin、Imgur、Youtube 等的 URL?

apache - 从 Laravel 的 URL 中删除 index.php

django - 使用 Django,设置管理内容和静态内容的路径的正确方法是什么?

apache - .htaccess:无效命令 'RewriteEngine' ,可能拼写错误或由服务器配置中未包含的模块定义

.htaccess - 哪些正确的权限必须具有网站的文件夹和文件?

.htaccess - htaccess - 如何强制客户端浏览器清除缓存?

apache - 不带子域的 301 重定向

.htaccess - 在 htaccess 中使用 https 协议(protocol)时删除 www

.htaccess - 使用 .htaccess/.htpasswd 将 IP 列入白名单

deployment - 进行 (phing) 部署时如何 "lock"实时站点