Назад | Перейти на главную страницу

защита htaccess только для некоторых папок поддоменов

У меня два сайта размещены как поддомены.

Один из сайтов использует поддомены в качестве псевдонимов для запросов динамических изображений.

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

Динамические изображения запрашиваются subX.example.com/images.php?.

В htaccess я хочу:

Ограничения: У меня нет доступа к httpd.conf, поэтому нет блока каталога

Я безуспешно тестировал SetEnv, SetEnvIf, IfDefine.

Чтобы обработать первые 2 элемента, вам нужно использовать SetEnvIf вместе с Satisfy, что-то вроде этого:

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

Для перенаправления вы можете использовать mod_rewrite. Я не совсем понимаю, что вы имеете в виду, но если хотите все перенаправленный на images.php, вы можете сделать что-то вроде:

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

Вероятно, было бы намного проще, если бы вы добавили RedirectMatch в файл vhost для доменов subX.example.com. Файл .htaccess предназначен для конфигурации на основе каталога, а не узла. На самом деле он не предназначен для того, чтобы делать то, о чем вы просите.

Я нашел решение. За странность он заслужил пятерку.

В корневом .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