Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-rus] CGI redirector vs. mod_rewrite



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 ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"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.