htaccess只保护一些子域文件夹

我有两个站点作为子域托pipe。

其中一个网站使用子域作为dynamic图像请求的别名。

site1.example.com site2.example.com sub1.example.com -> same as site1 sub2.example.com -> same as site1 sub3.example.com -> same as site1 

dynamic图像请求subX.example.com/images.php?

在htaccess我想:

  • 限制访问站点1和站点2(相同的用户和密码)
  • 在subX上没有authentication提示
  • 将所有内容都redirect到images.php以获取subXs请求

局限性:我没有访问httpd.conf的权限,所以没有目录块

我testing了SetEnv,SetEnvIf,IfDefine没有成功。

要处理前SetEnvIf ,您需要使用SetEnvIfSatisfy ,如下所示:

 SetEnvIf Host site1.example.com need_auth SetEnvIf Host site2.example.com need_auth Order allow,deny # setup whatever auth stuff you need here AuthName "Private" AuthType Basic AuthBasicProvider file AuthUserFile /etc/apache2/pwd # here's where you actually check the credentials and env Require valid-user Allow from env=!need_auth Satisfy Any 

要做redirect,你可以使用mod_rewrite。 我不完全确定你的意思,但是如果你想把所有的东西都redirect到images.php,你可以这样做:

 RewriteCond %{ENV:need_auth} ^.*$ RewriteRule ^(.*)$ http://site1.example.com/images.php [R] 

如果在subX.example.com域的vhost文件中添加了RedirectMatch,可能会更容易一些。 .htaccess文件被devise为基于每个目录的configuration,而不是基于主机的。 这并不是真的被devise来做你要问的东西。

我find了解决scheme。 它值得一个奇怪的A +。

在根.htaccess中:

 AuthUserFile /var/www/.htpasswd # will be inherited by children directories .htaccess 

在site1目录中.htaccess:

 SetEnvIf host ^s[0-9]+\. sub # Detect if the host target a subdomain for images AuthName "Restricted Area" AuthType Basic Order Deny,Allow Require valid-user # Access to anything except image.php is forbidden on subdomains for images <FilesMatch .*> Deny from env=sub </FilesMatch> # Access to image.php does not required authentication in subdomains for images <Files image.php> Allow from env=sub Satisfy any </Files> 

并在site2目录下.htaccess:

 AuthName "Restricted Area" AuthType Basic Order Deny,Allow Require valid-user