3种不同环境下的3个htaccess保护规则

时间:2014-01-17 16:25:44

标签: php .htaccess

我需要根据我正在处理的环境保护我网站的不同标准。 我有三种不同的环境:

  • localhost:保护一切
  • www.test.example.com:保护整个网站(这是一个测试网站,所以我不希望它可以访问)
  • www.example.com:仅保护/管理网址(实时网站,仅限/ admin受保护)

目前,我使用不同的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}

3 个答案:

答案 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地址识别服务器 - 这可能更可靠。