我需要根据我正在处理的环境保护我网站的不同标准。 我有三种不同的环境:
目前,我使用不同的htaccess文件。
对于test.example.com,我添加:
AuthUserFile mypasswordfile
AuthType Basic
AuthName "Enter password"
require valid-user
对于example.com,我添加:
SetEnvIf Request_URI /admin/? auth=1
AuthUserFile mypasswordfile
AuthType Basic
AuthName "Enter a password"
Order Deny,Allow
Deny from all
Allow from env=!auth
Require valid-user
Satisfy any
有没有办法只使用一个具有条件的htacess来获得类似
的东西if(localhost) { do nothing }
if(test.example.com) { require valid user on all domain }
if(example.com) { require valid user only on /admin}
答案 0 :(得分:2)
你可以使用这个组合的.htaccess:
# require valid user only on /admin
SetEnvIf Request_URI ^/admin(/|$) auth=1
# if(test.example.com) { require valid user on all domain }
SetEnvIf Host ^test\.example\.com$ auth=1
# if(localhost) { do nothing }
SetEnvIf Host ^localhost$ !auth
AuthUserFile mypasswordfile
AuthType Basic
AuthName "Enter a password"
Order Deny,Allow
Deny from all
Allow from env=!auth
Require valid-user
Satisfy any
答案 1 :(得分:0)
您可以使用版本控制,例如Mercurial(hg)并将这些文件添加到忽略列表中。这样,推送更改时不会覆盖.htaccess文件。
答案 2 :(得分:0)
如果您运行的是Apache 2.4+,则可以使用<If .. >
指令:http://httpd.apache.org/docs/2.4/mod/core.html#if
因此,您可以阅读Apache SERVER_NAME
并在.htaccess
文件中相应地应用条件。
<If "%{SERVER_NAME} =~ /^test\.example\.com/">
** require valid user on entire domain **
</If>
<ElseIf "%{SERVER_NAME} =~ /^example\.com/">
** require valid user only on /admin **
</ElseIf>
你可以保留它,或者添加一个特定的<ElseIf>
为'localhost',最后<Else>
包含'拒绝所有'或类似的 - 只是为了确保你不留下它如果您上传到另一个开发环境,则打开。
注意:您也可以使用SERVER_ADDR
代替SERVER_NAME
,并按IP地址识别服务器 - 这可能更可靠。