Stanislav Malyshev a.k.a Frodo wrote:
>
> Появилась еще одна проблема. Если страница под паролем, то выдается при
> обращении к http://sever/secret/page нечто странное:
>
> HTTP/1.1 301 Moved Permanently
> Date: Sun, 31 Jan 1999 18:48:40 GMT
> WWW-Authenticate: Basic realm="Realm"
> Location: http://server:8080/errors/401.html
> Connection: close
> Content-Type: text/html
>
> т.е. код он выдает 301, а страницу - от 401!! Естественно, браузер в это
> не врубается, пароля не спрашивает, и юзер получает страницу от "no
> authorized". При заходе с портом - все нормально.
А вот это очень похоже на облом :( По крайней мере, с ходу я не
соображу, как бы тут сделать. Что происходит, вроде бы понятно -
subrequest для определения CHARSET не удается, соответственно
вызываются другие трансляторы URI->filename, апач производит
внутренный редирект на 401.html, и вот тут все RewriteRules
выполняются для него по-новой. Причем без ErrorDocument 401
работать будет нормально.
В общем, проблема в том, что до успешной аутентикации невозможно
определить нужную кодировку и соответствующий ей порт. Надо менять
логику работы mod_rewrite (добавить опцию по типу nosubreq, чтобы
правила пропускались на редиректах) или mod_charset (чтобы определял
кодировку раньше, чем происходит проверка прав).
В качестве кривого решения можно добавить второе условие:
RewriteCond %{SERVER_PORT} !=80 [OR]
RewriteCond %{REQUEST_URI} =/errors/401.html
Будем думать...
--
Vladimir Pastukhov <vol@escortcorp.com>
PS. mod_rewrite я таки пропатчил - добавил параметр 'noredir',
работает. ftp://ftp.escortcorp.com/pub/Linux/misc/patches/
С учетом обоих патчей конфиг теперь выглядит так:
<IfModule mod_rewrite.c>
RewriteEngine On
<IfModule mod_charset.c>
RewriteCond %{SERVER_PORT} !=80
RewriteRule .* - [skip=9,nosubreq,noredir]
RewriteRule .* /%{LA-U:ENV:CHARSET}/ [nosubreq,noredir]
RewriteRule ^/koi8-r/ /8100 [skip=5,nosubreq,noredir]
RewriteRule ^/windows-1251/ /8101 [skip=4,nosubreq,noredir]
RewriteRule ^/ibm866/ /8102 [skip=3,nosubreq,noredir]
RewriteRule ^/iso-8859-5/ /8103 [skip=2,nosubreq,noredir]
RewriteRule ^/x-mac-cyrillic/ /8104 [skip=1,nosubreq,noredir]
RewriteRule .* %{REQUEST_URI} [skip=2,nosubreq,noredir]
RewriteRule ^/([^/]+) /$1 [redirect,nosubreq,noredir]
RewriteRule ^([^/]+://[^/:]+)(:[^/]*)?/([^/]+) $1:$3%{REQUEST_URI} [redirect=permanent,last,nosubreq,noredir]
</IfModule>
# Add custom rules here
</IfModule>
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.