apache: базовая аутентификация перед перезаписью - PullRequest
9 голосов
/ 09 апреля 2010

У меня есть apache во внешнем интерфейсе, который перенаправляет запрос через правило перезаписи. Я должен поставить базовую аутентификацию перед перенаправлением запроса, поэтому я помещаю это в файл конфигурации:

<VirtualHost *:443>
    ServerAdmin xxxxxx
    DocumentRoot /var/www/html/
    ServerName xxxxxxx
    RewriteEngine on
    ErrorLog logs/error.log
    CustomLog logs/access_log common

    <Directory /var/www/html/>
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /etc/httpd/conf/tag.pwd
        Require valid-user
        RewriteRule ^/(.*) http://xxxxxx:xxx/$1   [P,L]
    </Directory>
</VirtualHost>

Но не работает.

Есть предложения?

Ответы [ 3 ]

10 голосов
/ 08 ноября 2012

Как правило, Apache выполняет этап перезаписи перед этапом авторизации, поэтому ваш код выполняет перезапись, даже не запрашивая у пользователя аутентификацию.

Вы можете обойти это с помощью переменной LA-U:REMOTE_USER. Предшествуйте вашему RewriteRule с условием, которое смотрит вперед ("LA") к фазе авторизации:

RewriteCond %{LA-U:REMOTE_USER} !^$
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [L]

См. Примечания об этом в http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

Как отмечают другие авторы, также лучше вынести директивы RewriteRule из блока, чтобы они были более надежными.

5 голосов
/ 12 апреля 2010

Я решил поместить условие перезаписи и правило перезаписи вне директивы Locatio:

<Location />
  AuthType Basic
  AuthName "Restricted Files"
  AuthUserFile /etc/httpd/conf/tag.pwd
  Require valid-user
</Location>
RewriteCond %{LA-U:REMOTE_USER} !^$
RewriteRule ^/(.*) http://xxxxxx:xxx/$1   [P,L]

большое спасибо h0tw1r3 за предложение

* Помните, что директивы Location работают с URL-адресами, а не с каталогами. Это означает, что если кто-то создаст псевдоним для корня документа, они полностью обойдут эти правила аутентификации. (Подробнее см. http://httpd.apache.org/docs/2.0/mod/core.html#location)

2 голосов
/ 11 апреля 2010

Обновление : неявное правило каталога всегда требует проверки перед тем, как переписать. Обнаружено, что различные комбинации модулей apache изменяют поведение, поэтому принятый ответ может не всегда работать.

<Location />
    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /etc/httpd/conf/tag.pwd
    Require valid-user
</Location>

<Directory /documentroot>
    RewriteCond %{LA-U:REMOTE_USER} (.+)
    RewriteRule (.*) http://xxxxxx:xxx/$1   [P,L]
</Directory>
...