У меня два сайта размещены как поддомены.
Один из сайтов использует поддомены в качестве псевдонимов для запросов динамических изображений.
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