mod_rewrite не срабатывает... (баян?)

El_Oscuro

Новичок
mod_rewrite не срабатывает... (баян?)

Всем ДД!

Помогите, пожалуйста. Понимаю, тема изъезженная вдоль и поперёк, но никак не могу понять, почему не получается...

Итак, задача. При попытке войти по адресу http://server.com/xxx/index.php перенаправлять пользователя на адрес http://server.com/index.php/xxx. Причём, чтобы в строке URL остался старый адрес, то есть вариант [R] не годится (хотя работает).

Вроде бы всё просто:

RewriteEngine on
RewriteBase /
RewriteCond $1 !^index\.php$ [NC]
RewriteRule ^(.+)/index.php$/ /index.php/$1 [L]

Но не работает. :( Выдает ошибку 404.

По логам mod_rewrite всё правильно делает.

Причём, если последнюю строку записать в виде RewriteRule ^(.+)/index.php$/ /index.php?$1 [L], то есть заменить слэш после index.php на знак вопроса, то всё отлично работает!

Спасибо всем за помощь!
 

Фанат

oncle terrible
Команда форума
нет, не баян.
ты первый, кому пришла в голову такая гениальная идея - использовать мод-реврайт для перенаправления с индекса.
все остальные делают ровно наоборот.

скажи пожалуйста, а а такой оператор, как include, не может решить твою проблему?
 

El_Oscuro

Новичок
*****

Почему с индекса? Смотри внимательнее:

с xxx/index.php кидаем на index.php/xxx.

Причём тут include? Не очень понял...
 

Фанат

oncle terrible
Команда форума
да, я посмотрел невнимательно.
а что имеется в виду под RewriteCond?

и, не в тему, но любопытно - нафига вообще здесь все эти index.php?
 

El_Oscuro

Новичок
*****,

хочу сделать двухязычный сайт.

Чтобы из ссылок типа server.com/en/index.php, которые автоматом преобразуются в server.com/index.php/en фреймворк сам выдёргивал язык.

RewriteCond не особо роялит тут... Имелось в виду заставить работать вариант, когда после index.php ничего нет, как частный случай.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума

Фанат

oncle terrible
Команда форума
а зачем адресу server.com/en/ еще довесок в виде index.php?
 

El_Oscuro

Новичок
Автор оригинала: Mr_Max
El_Oscuro

У Вас есть директория index.php?
Нет, разумеется. Есть скрипт index.php, который умеет парсить свой uri и выдергивать оттуда параметры (index.php/aaa/bbb/ccc - три параметра: aaa, bbb, ccc).

На сайте был, читал. Но там не совсем та информация, что мне нужна.

Может быть вот что: например, после удачного преобразования aaa/index.php => index.php/aaa, там будет, соответственно, параметр aaa. :)

-~{}~ 29.08.07 12:41:

Автор оригинала: *****
а зачем адресу server.com/en/ еще довесок в виде index.php?
Потому что иначе ищется файл server.com/en/index.htm, которого, конечно, там нет.
 

El_Oscuro

Новичок
Автор оригинала: *****
какой кошмар.
а директиву DirectoryIndex уже, наверное, отменили.
Я всё понимаю, но... Честно говоря, интересует даже не столько решение задачи с передачей языка в урле, сколько понимание, почему вариант в исходном посте не работает. В теории всё должно идеально работать, но на практике - увы. :mad:

При этом вариант рерайта с передачей параметров не через ЧПУ, а через GET ("index.php?aaa&bbb&ccc") отлично работает, как я и написал в исходном посте. Почему? Из логов ничего не видно, включена максимальная детализация...

P.S. Не суди строго, я ещё очень и очень начинающий в этом деле. :cool:
 

Фанат

oncle terrible
Команда форума
друг мой.
я понимаю, что тебя интересует.
но и ты меня пойми.

зачем в адресе указывать index.php, если адрес ВСЕ РАВНО БУДЕТ ПРЕОБРАЗОВАН?!

при чем здесь "ищется файл server.com/en/index.htm", если не то что файла index.htm, но даже и КАТАЛОГА en у тебя НЕТ!
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
El_Oscuro
мля.
почему вариант в исходном посте не работает
потому что
у вас в реврайте откуда идёт перенаправление?
с какой радости тогда реврайт должен работать?
 

El_Oscuro

Новичок
Автор оригинала: *****
друг мой.
я понимаю, что тебя интересует.
но и ты меня пойми.

зачем в адресе указывать index.php, если адрес ВСЕ РАВНО БУДЕТ ПРЕОБРАЗОВАН?!

при чем здесь "ищется файл server.com/en/index.htm", если не то что файла index.htm, но даже и КАТАЛОГА en у тебя НЕТ!
Дописал в том же .htaccess: DirectoryIndex index.php

Результат: вариант www.server.com/ выкидывает на index.php, как и положено.

Остальные варианты (www.server.com/en, www.server.com/en/) дают ту же ошибку 404...

-~{}~ 29.08.07 14:40:

Автор оригинала: Mr_Max
El_Oscuro
мля.

потому что
у вас в реврайте куда идёт перенаправление?
к ДИРЕКТОРИИ /index.php/
с какой радости тогда реврайт должен работать?
Хорошо, что надо сделать, чтобы явно указать, что index.php в данном случае - не директория, а текстовый файл?
 

Фанат

oncle terrible
Команда форума
Дописал в том же .htaccess: DirectoryIndex index.php
это тебе не нужно.
в данном случае.
почему - я написал в тексте, который ты старательно процитировал, но, судя по всему - не понял ни одной буквы.

ошибку у тебя выдает твой мод реврайт.
а речь не о нем. а о том, что ты зачем то в запрашиваемом, НЕСУЩЕСТВУЮЩЕМ адресе пишешь несуществующий index.php

если последнюю строку записать в виде RewriteRule ^(.+)/index.php$/ /index.php?$1 [L], то есть заменить слэш после index.php на знак вопроса, то всё отлично работает!
блин. я одного не пойму. если у тебя все работает, то о чем мы здесь вообще говорим?!
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Нет, разумеется. Есть скрипт index.php, который умеет парсить свой uri и выдергивать оттуда параметры (index.php/aaa/bbb/ccc - три параметра: aaa, bbb, ccc).
http://phpclub.ru/faq/wakka.php?wakka=chpu&v=5b3

# Закомментируйте ниже, если скрипт должен перехватывать:
RewriteCond %{REQUEST_FILENAME} !-f # - запросы к существующим файлам
RewriteCond %{REQUEST_FILENAME} !-d # - запросы к существующим директориям

RewriteRule (.*)$ index.php/$1 [QSA]
 

El_Oscuro

Новичок
Автор оригинала: *****
это тебе не нужно.
в данном случае.
почему - я написал в тексте, который ты старательно процитировал, но, судя по всему - не понял ни одной буквы.
В каком именно тексте?

ошибку у тебя выдает твой мод реврайт.
а речь не о нем. а о том, что ты зачем то в запрашиваемом, НЕСУЩЕСТВУЮЩЕМ адресе пишешь несуществующий index.php
Почему несуществующий?? index.php очень даже реальный, вопрос лишь в том, что надо один параметр, который находится в адресе до index.php перекинуть после index.php!

Возможно, проблема действительно, как написал Mr_Max, в том, что в моём варианте в получившемся URL 'index.php' рассматривается как папка...

блин. я одного не пойму. если у тебя все работает, то о чем мы здесь вообще говорим?!
Ещё раз скажу: хотелось бы докопаться до истины. :D
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ещё раз скажу: хотелось бы докопаться до истины.
Вы ж уже сами докопались

есть заменить слэш после index.php на знак вопроса
Только не /
а заменить на /?

-~{}~ 29.08.07 14:04:

так-как / не всегда-же присутствует

-~{}~ 29.08.07 14:10:

Возможно, проблема действительно, как написал Mr_Max, в том, что в моём варианте в получившемся URL 'index.php' рассматривается как папка...
Простите. Я немного там запутался. :(
 

El_Oscuro

Новичок
Подвожу итог:

RewriteRule (.*)$ index.php/$1 [QSA]

не работает. :-(

RewriteRule ^(.+)/index.php$ index.php/?$1 [L]

не работает. :-(
 

Фанат

oncle terrible
Команда форума
мля.
ЕЩЕ РАЗ задаю вопрос.
зачем нужен index.php в адресе, к которому обращается браузер?

тебе сто раз сказали, что нет такого каталога - index.php
КАКОГО ХРЕНА после него до сих пор пишется косая черта?!
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
"/?" - RewriteRule ^your_dir/?$ index.php [R]

не работает. :-(
RewriteRule (.*)$ phpinfo.php/$1 [QSA]

phpinfo.php
<?php
phpinfo();
?>

При запросе

http://www.yaur_site/123123/123123123123/123123123123

request_uri что показывает?
 
Сверху