Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];

Вниз

Где ошибка в настройке mod_rewrite?   Найти похожие ветки 

 
Дмитрий С ©   (2009-09-04 10:06) [0]

Есть виртуальный хост. В его папке лежит файл .htaccess:
RewriteEngine On

# Исключаем повторную обработку
RewriteCond %{ENV:REDIRECT_STOPFLAG} =1
RewriteRule . - [L]
RewriteRule . - [E=STOPFLAG:1]

# Доступ к картинкам, css и фоткам во всех папках
RewriteRule (/|^)((i|css|ph)/.*)$   $2 [L]

# Доступ к документам по сокращенному адресу
RewriteRule (/|^)~(/.*)$   doc$2

# дописываение .php в конец файла
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(doc/(.+/)?[^.]+)$  $1.php [L]


В папке doc/university/ есть файл about.php, который нормально открывается по запросу: http://www.domain.ru/~/university/about.php (картинки на месте).

Но по запросу:
http://www.domain.ru/~/university/about
Сервер выдает:
Not Found

The requested URL /doc/university/about/university/about.php was not found on this server.


Откуда берется это "удвоение адреса"?

Сделал RewriteLog с уровнем 9:
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add path info postfix: D:/Home/www/domain.ru/www/htdocs/~ -> D:/Home/www/domain.ru/www/htdocs/~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] strip per-dir prefix: D:/Home/www/domain.ru/www/htdocs/~/university/about -> ~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] applying pattern "." to uri "~/university/about"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (4) [perdir D:/Home/www/domain.ru/www/htdocs/] RewriteCond: input="" pattern="=1" => not-matched
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add path info postfix: D:/Home/www/domain.ru/www/htdocs/~ -> D:/Home/www/domain.ru/www/htdocs/~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] strip per-dir prefix: D:/Home/www/domain.ru/www/htdocs/~/university/about -> ~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] applying pattern "." to uri "~/university/about"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (5) setting env variable "STOPFLAG" to "1"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add path info postfix: D:/Home/www/domain.ru/www/htdocs/~ -> D:/Home/www/domain.ru/www/htdocs/~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] strip per-dir prefix: D:/Home/www/domain.ru/www/htdocs/~/university/about -> ~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] applying pattern "(/|^)((i|css|ph)/.*)$" to uri "~/university/about"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add path info postfix: D:/Home/www/domain.ru/www/htdocs/~ -> D:/Home/www/domain.ru/www/htdocs/~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] strip per-dir prefix: D:/Home/www/domain.ru/www/htdocs/~/university/about -> ~/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] applying pattern "(/|^)~(/.*)$" to uri "~/university/about"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (2) [perdir D:/Home/www/domain.ru/www/htdocs/] rewrite "~/university/about" -> "doc/university/about"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add per-dir prefix: doc/university/about -> D:/Home/www/domain.ru/www/htdocs/doc/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add path info postfix: D:/Home/www/domain.ru/www/htdocs/doc/university/about -> D:/Home/www/domain.ru/www/htdocs/doc/university/about/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] strip per-dir prefix: D:/Home/www/domain.ru/www/htdocs/doc/university/about/university/about -> doc/university/about/university/about
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] applying pattern "^(doc/(.+/)?[^.]+)$" to uri "doc/university/about/university/about"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (4) [perdir D:/Home/www/domain.ru/www/htdocs/] RewriteCond: input="D:/Home/www/domain.ru/www/htdocs/doc/university/about" pattern="!-f" => matched
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (2) [perdir D:/Home/www/domain.ru/www/htdocs/] rewrite "doc/university/about/university/about" -> "doc/university/about/university/about.php"
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add per-dir prefix: doc/university/about/university/about.php -> D:/Home/www/domain.ru/www/htdocs/doc/university/about/university/about.php
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (2) [perdir D:/Home/www/domain.ru/www/htdocs/] strip document_root prefix: D:/Home/www/domain.ru/www/htdocs/doc/university/about/university/about.php -> /doc/university/about/university/about.php
[www.domain.ru/sid#67da70][rid#1ab9330/initial] (1) [perdir D:/Home/www/domain.ru/www/htdocs/] internal redirect with /doc/university/about/university/about.php [INTERNAL REDIRECT]
[www.domain.ru/sid#67da70][rid#19aba80/initial/redir#1] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] add path info postfix: D:/Home/www/domain.ru/www/htdocs/doc/university/about -> D:/Home/www/domain.ru/www/htdocs/doc/university/about/university/about.php
[www.domain.ru/sid#67da70][rid#19aba80/initial/redir#1] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] strip per-dir prefix: D:/Home/www/domain.ru/www/htdocs/doc/university/about/university/about.php -> doc/university/about/university/about.php
[www.domain.ru/sid#67da70][rid#19aba80/initial/redir#1] (3) [perdir D:/Home/www/domain.ru/www/htdocs/] applying pattern "." to uri "doc/university/about/university/about.php"
[www.domain.ru/sid#67da70][rid#19aba80/initial/redir#1] (4) [perdir D:/Home/www/domain.ru/www/htdocs/] RewriteCond: input="1" pattern="=1" => matched
[www.domain.ru/sid#67da70][rid#19aba80/initial/redir#1] (1) [perdir D:/Home/www/domain.ru/www/htdocs/] pass through D:/Home/www/domain.ru/www/htdocs/doc/university/about

Временный метки удалил.

Вообще хочу, чтобы можно было указывать страницу без расширения. Т.е. если расширения нет, то используется файл с таким именем и расширением php.


 
Дмитрий С ©   (2009-09-04 11:28) [1]

А если вот эту строку

# Доступ к документам по сокращенному адресу
RewriteRule (/|^)~(/.*)$   doc$2


Поменять на

# Доступ к документам по сокращенному адресу
RewriteRule (/|^)~(/.*)$   doc$3


то все работает как надо. А почему? Глюк регулярного выражения?


 
Дмитрий С ©   (2009-09-04 15:26) [2]

Какой-то нелогичный модуль.

RewriteEngine On
RewriteRule ^.*$ $0 [L]


Получаем ошибку:
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use "LimitInternalRecursion" to increase the limit if necessary. Use "LogLevel debug" to get a backtrace.

Хотя и L стоит и в мануале написано, что после прохождения последнего RewriteRule  процесс заканчивается. Это еще как-то можно понять, дальше — больше:

RewriteEngine On
# Исключаем повторную обработку
RewriteCond %{ENV:REDIRECT_STOPFLAG} =1
RewriteRule .? - [L]
RewriteRule .? - [E=STOPFLAG:1]

# Далее три правила добавляют CBA в начало адреса и ABC в конце (это ожидаемый результат)
RewriteRule ^.*$ A$0A
RewriteRule ^.*$ B$0B
RewriteRule ^.*$ C$0C

Выполняется запрос /a/b/c, результат поражает:
Not Found
The requested URL /CBAa/b/cA/b/cB/b/cC was not found on this server.

CBА добавилось, но каким образом появилось то, что появилось справа? Логика непонятна. Но и это не все:
# Исключаем повторную обработку
RewriteCond %{ENV:REDIRECT_STOPFLAG} =1
RewriteRule .? - [L]
RewriteRule .? - [E=STOPFLAG:1]

# Если адрес начинается на "a", должен быть редирект, с приписываением буквы "b" слева
RewriteRule ^a.*$ b$0 [R]

Выполняется запрос /a/b/c, результат просто убивает: редирект на /D:/Home/www/domain.ru/www/htdocs/ba/b/c. Откуда в uri взялся путь?

Кто-нибудь может прокомментировать результат? Куда можно обратиться с вопросом (английский не знаю)?


 
Дмитрий С ©   (2009-09-07 08:07) [3]

Неужели у меня одного такое? Это правильно?
Я и на windows и на unix проверил уже.


 
Дмитрий С ©   (2009-09-07 13:37) [4]

Нашел этот баг тут:
https://issues.apache.org/bugzilla/show_bug.cgi?id=38642

Кто-нибудь может помочь понять что к чему?


 
Дмитрий С ©   (2009-09-07 14:15) [5]

Наконец-то решил. Три рабочих дня потратил на поиски :) УРАА

Кто-нибудь будет искать в поиске, пусть найдет:
 *) mod_rewrite: Introduce DiscardPathInfo|DPI flag to stop the troublesome
    way that per-directory rewrites append the previous notion of PATH_INFO
    to each substitution before evaluating subsequent rules.
    PR38642 [Eric Covener]



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
15-1251873457
Ak47
2009-09-02 10:37
2009.11.01
Перевод компьютерных терминов


15-1251978221
Ak47
2009-09-03 15:43
2009.11.01
проверить содержится ли значение в массиве


15-1251837006
Юрий
2009-09-02 00:30
2009.11.01
С днем рождения ! 2 сентября 2009 среда


1-1222068508
Decoding
2008-09-22 11:28
2009.11.01
CPL


15-1251407536
flaxe
2009-08-28 01:12
2009.11.01
Usb Ключ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский