Почему глючит RewriteRule + urlencode ?

V
На сайте с 22.09.2006
Offline
103
679

Люди добрые, подскажите, уже в ступор впадаю :(

настроен рерайт

RewriteRule ([^.]*)[.]* index.php?file=$1 [L,QSA,T=application/x-httpd-php]

который в моем понимании, ловит файлы в корневой директории и передает скрипту имя файла.

Когда обращаюсь к

http://localhost/15.htm

все работает как надо, но когда по ссылке с кирилицей, сформированой urlencode(), например

http://localhost/1+%F1%F2%E0%F2%FC%FF+%E2+%EA%EE%F0%ED%E5.htm или

http://localhost/2_%F1%F2%E0%F2%FC%FF_%E2_%EA%EE%F0%ED%E5.htm

то получаю :

Error 403

Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1

Почему так и как это исправить?

Та же комбинация через подкаталог работает нормально:

RewriteRule ([^.]*)/([^.]*)[.]* index.php?dir1=$1&file=$2 [L,QSA,T=application/x-httpd-php]

http://localhost/2/1+%F1%F2%E0%F2%FC%FF+%E2+%EA%EE%F0%ED%E5.htm

.
siv1987
На сайте с 02.04.2009
Offline
427
#1

vantala, работайте в utf-8, с ним проблем нету

http://localhost/1+%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F+%D0%B2+%D0%BA%D0%BE%D1%80%D0%BD%D0%B5.htm

gormarket
На сайте с 29.12.2010
Offline
47
#2

сам по себе приведенный Вами реврайт не способен вызвать ответ с кодом 403

403 Forbidden

При отсутствии полных данных остается только гадать

либо у Вас в .htaccess есть правило, которое после приведенного реврайта (а может и до него) отдает ответ с кодом 403 (посмотрите строки RewriteRule с флагом F)

либо 403 код возвращает index.php в данной ситуации (при адресе содержащем типа ...%F1%F2%E0...)

вторую версию легко проверить, создав файл index1.php со следующим кодом

<?php

print '<pre>';

print_r($_GET);

print '<pre>';

?>

и изменив строку реврайта

RewriteRule ([^.]*)[.]* index1.php?file=$1 [L,QSA,T=application/x-httpd-php]

если будет работать со всеми тремя приведенными адресами (у себя проверил - работает), то 403 код отдает index.php

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
V
На сайте с 22.09.2006
Offline
103
#3

siv1987, а если нужно создать движок в версии именно 1251, что прикажете делать?

gormarket, нет никаких полных данных, в хтаксесе только это правило, никаких F нет

index.php тоже примерно вашего содержания - выводит поступившие переменные и все, ваш тоже попробовал - то же самое.

Если у вас эта связка работает, остается грешить только на мою сборку XAMPP, попробую обновиться...

Большое спасибо за содействие.

siv1987
На сайте с 02.04.2009
Offline
427
#4
vantala:
а если нужно создать движок в версии именно 1251, что прикажете делать?

Тогда сидеть и придумывать костыли

RewriteRule ^win/([^.]*)[.]* index.php?file=$1 [L,QSA,T=application/x-httpd-php]

У меня Apache/2.2.4 (Win32) - тоже не работает.

V
На сайте с 22.09.2006
Offline
103
#5

gormarket, а на чем у вас работало?

gormarket
На сайте с 29.12.2010
Offline
47
#6
vantala:
gormarket, а на чем у вас работало?

у меня локально версия более ранняя

Apache/1.3.33 (Win32) PHP/4.4.4

но на хостинге тоже работает, там

Apache/2.0.63-lk.d (Unix) ...

не уверен что поможет, но все таки попробуйте добавить флаг NE

RewriteRule ([^.]*)[.]* index.php?file=$1 [L,QSA,NE,T=application/x-httpd-php]


'noescape|NE' (не экранировать URI при выводе)
Этот флаг не даёт mod_rewrite применять обычные правила экранирования URI к результату преобразования. Обычно, специальные символы (такие как '%', '$', ';', и так далее) будут экранированы их шестнадцатиричными подстановками ('%25', '%24', и '%3B', соответственно); этот флаг не дает это делать. Это позволяет символам процента появлятся на выходе

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий