Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.01;
Скачать: CL | DM;

Вниз

Где ошибка в настройке 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
2-1252392985
kostyl_kostyl
2009-09-08 10:56
2009.11.01
Как добиться прозрачности TScrollBox


2-1252774558
Евгений Сальников
2009-09-12 20:55
2009.11.01
Как сравнить две даты, высчитав кол-во дней?


15-1252076055
Ruzzz
2009-09-04 18:54
2009.11.01
Не работает переименование(рефакторинг) в Windows 7


2-1252496495
DmitryNPK
2009-09-09 15:41
2009.11.01
Компьютер заблокирован


1-1222137558
Vitaliy_____
2008-09-23 06:39
2009.11.01
Установка приоритета процесса