如何在使用SVN时密码保护开发者但不能生存?

问题描述

| 我们有这个工作流程: 开发在dev.example.com上完成 所做的更改将提交给SVN,然后导出到实时站点。 实时网站位于www.example.com 我想用密码保护dev.example.com,但是如果我用.htaccess进行密码保护,那么我们将在实际站点中使用相同的.htaccess,它也将获得密码保护。 我们正在使用Dreamhost共享主机,我具有SSH访问权限,但是我无法编辑Apache的配置.conf文件。 我们不想为dev&live使用单独的.htaccess文件,而不想在SVN中忽略.htaccess,因为对.htaccess也进行了更新。 所以我该怎么做?     

解决方法

如果在服务器上启用了“ 0”,则可以将其添加到“ 1”文件中:
SetEnvIfNoCase ^HOST$ .+ unauthenticated
SetEnvIfNoCase ^HOST$ ^dev\\.example\\.com$ !unauthenticated

AuthType Basic
AuthName \"Secured\"
AuthUserFile /path/to/.htpasswd
Require valid-user
Order allow,deny
Allow from env=unauthenticated
Satisfy any
它的基本作用是设置一个名为“未认证”的环境变量,但是如果HOST(浏览器请求的主机)恰好是“ dev.example.com”,则将其取消设置。在Directory指令中,“满足任何条件”告诉Apache如果满足以下任一条件,则允许请求。这意味着将不会在\“ dev.example.com \”上设置环境变量,因此,将需要您输入密码。对于任何其他主机,将设置该变量,以便Apache不会要求提供凭据。     ,您可以忽略
.htaccess
,将其完全排除在存储库之外。然后,每个服务器上只有两个不同的“ 1”文件。因为它们被忽略,所以它们不会在SVN更新中被覆盖。     ,在Apache virtualhost配置中而不是.htaccess文件(通常在
/etc/apache
或in6ѭ中)进行操作。 我将所有要放入.htaccess的内容都放在这里。这些设置通常需要根据部署而有所不同,因此将它们保留在存储库之外是有意义的。如果Apache可以在启动时加载指令,而不是从每个请求的.htacess文件中加载指令,它也可以使您的应用程序更快。 我通常也会在其中放置这样的指令:
SetEnv APP_ENV production
它将通过您的应用程序传递,并允许您检测您是否处于开发环境还是生产环境中,并相应地调整设置。 我还将此conf文件的副本保留在我的repo的Assets文件夹中,以方便访问。     ,在存储库中放入两个文件: htaccess.dev htaccess.live 通过首先将所有文件导出到目标服务器,然后根据导出到哪个服务器来重命名正确的htaccess文件,来制作一个照顾部署的脚本。该脚本应该易于调用,并且一步一步完成整个部署,包括处理服务器的主机名等:
deploy dev
deploy live
是两个不错的命令行。 对于ssh登录,您将不得不提示用户输入脚本中的密码,或者更好的方法是使用基于密钥的身份验证,以便自动登录。     ,与其在远程服务器上进行开发,不如在本地计算机上进行开发?您可以在回购中为每个开发人员创建分支,并在准备将其推送到实际站点时将其更改与主干合并。     ,您实际上应该将开发和生产环境尽可能地分开。我建议您重新评估使用共享的
.htaccess
文件的初衷。以我的经验,像ѭ1这样的服务器文件通常不会经常更新,因此不会对工作效率造成威胁。 如果使用虚拟主机,则可以将授权代码放在该文件(httpd或vhosts配置文件)中,这将允许您仍然使用共享的.htaccess文件。     ,@formicin, 我假设的主要目标是让您的目光远离开发人员的内容。 如果要在代码中实现逻辑(而不是通过Apache配置实现),则可以使用HTTP请求本身中指定的主机名。
$dev_server = \"dev.mysite.com\";
$hostname_used_to_access_site = $_SERVER[\'SERVER_NAME\'];

if (strcasecmp($hostname_used_to_access_site,$dev_server) == 0) {
    // The server name sent by the browser matches the name
    // of the dev server,so check for a valid session. If
    // the user hasn\'t already logged in,redirect to a
    // login page.
}
可以将其放入公共包含文件中,或放在每个页面的顶部。请注意,开发人员和生产人员之间的代码相同,但是值the13ѭ将导致登录代码仅在开发服务器上执行。 如果我错过了商标,或者您想澄清如何处理登录,请发表评论。 谢谢!     ,对文件头进行导入以导入文件
include(\"permission.php\")
在dev.example.com上: Permission.php
<?PHP
   // Do a password check
?>
在www.example.com上: Permission.php
<?PHP
   // Just an empty file
?>
在开发站点上,它将执行密码操作所需的操作,但是在实时站点上,它将完全不执行任何操作。     ,两个简单的建议-都不需要.htaccess或服务器配置。 1)如果您是基于CMS框架(例如Wordpress)构建的,则只需将网站的隐私设置(仪表板>设置)设置为受开发网站上的密码保护,并且由于所有这些设置都是由数据库管理的,因此您可以只需将直播网站设为公开即可。 ...要么... 2)在本地开发并推送到单独的受密码保护的安装。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...