我们有本地服务器,中央开发,登台和生产服务器.但是,由于显而易见的原因,dev和staging受密码保护.因此,在对htaccess部署任何更改后,我必须手动编辑htaccess文件以在dev和staging服务器上启用密码保护.
有没有办法让基于域名的条件块如下:
if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){
AuthName "Password Protected Area"
AuthType Basic
AuthUserFile /somewhere/.htpasswd
Require valid-user
}
Run Code Online (Sandbox Code Playgroud)
我需要找到相当于条件的htaccess:
if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){
}
Run Code Online (Sandbox Code Playgroud)
我很感激你们给予的任何帮助或指示.
Thi*_*ter 30
虽然通过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
Run Code Online (Sandbox Code Playgroud)
您也可以使用白名单来实现,这可能会更好,因为它确保您的开发站点仍然受到保护,即使有人决定允许通过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
Run Code Online (Sandbox Code Playgroud)
如果您的服务器上没有mod_setenvif,mod_rewrite也可以为您完成工作(使用以下内容替换白名单示例中的SetEnvIf块):
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]
Run Code Online (Sandbox Code Playgroud)
我找到了一个很好的解决方案,以区分"localhost"和"live":
由于htaccess的条件有限,为什么不满足于IfModule?:比较你拥有的模块(即使用,并寻找一个重要的,希望长期的差异,例如,如果你在Windows上开发并在linux上部署mod_win32.c可能好的.(别忘了添加phpinfo()省略的.c.)
然后你可以像这样(测试):
<IfModule mod_win32.c>
RewriteRule ^banana$ test.php?dudeThisIsLocal=1
</IfModule>
<IfModule !mod_win32.c>
RewriteRule ^banana$ test.php?dudeThisIsLive=1
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这个例子是一个很好的理智测试,浏览你的域名/香蕉分配.localhost/banana如果你(启用了重写)在test.php中转储$ _GET数组.如果这样可行,请使用您的真实配置语句填充代码叉.
归档时间: |
|
查看次数: |
11772 次 |
最近记录: |