[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: И снова mod_rewrite....
v3l0m
Извините что задаю такой вопрос... но описание выхода не нашел и в справке тоже туговато...
Ну вот и сам вопрос:

1.есть сайт
www.xxxx.in.ua/index.php

2.есть админ страничка
www.xxxx.in.ua/admin/index.php

3.GET параметры на сайте должны быть в таком виде
www.xxxx.in.ua/index.php?page=main
www.xxxx.in.ua/index.php?page=main&subpage=submain

4.GET параметры на странице админа должны быть в таком виде
www.xxxx.in.ua/admin/index.php?page=menu
www.xxxx.in.ua/admin/index.php?page=menu&do=delete
www.xxxx.in.ua/admin/index.php?page=menu&do=edit&menuid=3

5. Для нормального вида ссылок сделано следующее (.htaccess)
Код
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?page=$1&subpage=$2 [L]

RewriteRule ^admin/([A-Za-z0-9-]+)/?$ admin/index.php?page=$1 [L]
RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ admin/index.php?page=$1&do=$2 [L]
RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ admin/index.php?page=$1&do=$2&menuid=$3 [L]
</IfModule>

ПРОБЛЕМЫ:
1. При ссылке http://www.webguru/admin/menu получается что реальный адрес www.xxxx.in.ua/index.php?page=admin&subpage=menu
2. При ссылке http://www.webguru/admin/menu/xxxx получается что реальный адрес www.xxxx.in.ua/admin/index.php?page=admin&do=menu&menuid=xxxx

Подскажите пожалуйста как это сделать правильно. Буду очень благодарен



Спустя 16 минут, 4 секунды (29.09.2008 - 22:23) zash написал(а):
Не уверен на все 100%, но мне кажется что все дело в конечном слэше, то есть если попробовать набрать "http://www.webguru/admin/menu/" со слэшэм в конце то все будет ОК. Если так то в правилах нужно написать без слэшей, те:
Код
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^([A-Za-z0-9-]+)?$ index.php?page=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ index.php?page=$1&subpage=$2 [L]

RewriteRule ^admin/([A-Za-z0-9-]+)?$ admin/index.php?page=$1 [L]
RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ admin/index.php?page=$1&do=$2 [L]
RewriteRule ^admin/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ admin/index.php?page=$1&do=$2&menuid=$3 [L]
</IfModule>

Спустя 11 минут (29.09.2008 - 22:34) v3l0m написал(а):
только что попробовал
1. при http://www.xxxx.in.ua/admin строка сама подменяется на http://www.xxxx.in.ua/admin/?page=admin а реальный адрес остается на http://www.xxxx.in.ua/index.php.........
2. при http://www.xxxx.in.ua/admin/ реальный адрес такой http://www.xxxx.in.ua/index.php?page=admin

3. при http://www.xxxx.in.ua/main все правильно адрес http://www.xxxx.in.ua/index.php?page=main
4. при http://www.xxxx.in.ua/main/ капец адрес нот фаунд

Спустя 4 минуты, 1 секунда (29.09.2008 - 22:38) v3l0m написал(а):
а реально эти правила как-то разграничить по директориям..??
просто у меня в голову пока другие варианты не приходят...

Спустя 10 часов, 37 минут, 38 секунд (30.09.2008 - 09:16) bvn написал(а):
Может использовать кондишены?
Код
RewriteCond     %{REQUEST_FILENAME} ((admin)/.*)
RewriteRule    ... правила для админки
RewriteCond     %{REQUEST_FILENAME} !-d
RewriteRule     ... правила для остальных не-директорий

Спустя 31 минута, 16 секунд (30.09.2008 - 09:47) linedmk написал(а):
Вот строка
Код
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?page=$1&subpage=$2 [L]

которая и преобразует любые два значения в
Код
www.xxxx.in.ua/index.php?page=ля-ля&subpage=ля-ля

в общем нужно привести к виду типа
Код
RewriteRule ^page/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?page=$1&subpage=$2 [L]


Спустя 7 минут, 42 секунды (30.09.2008 - 09:55) amadeus написал(а):
Очень правильный совет, что хорошо бы автору разобраться с директивой RewriteCond
Ну, а в текущем примере, примитивно можно добиться желаемого результата разместив правила для директории admin в тексте файла выше правил для общей директории, тогда
http://www.webguru/admin/menu обработается по правилу
RewriteRule ^admin/([A-Za-z0-9-]+)?$ admin/index.php?page=$1 [L]
а не по правилу
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ index.php?page=$1&subpage=$2 [L]
Да и надо ещё предусмотреть, что нужно сделать для url http://www.webguru/admin/ сейчас это обработается только по правилу
RewriteRule ^([A-Za-z0-9-]+)?$ index.php?page=$1 [L]
что, видимо, не очень устроит автора.

Спустя 2 часа, 40 минут, 53 секунды (30.09.2008 - 12:35) bvn написал(а):
А еще я хотел было сказать... Вобщем, это мое ИМХО, я бы не стал заморачиваться разбиением сегментов пути с помощью mod_rewrite, а делал бы это в index.php, отдав ему всю строчку, как есть...

Спустя 8 часов, 4 минуты, 47 секунд (30.09.2008 - 20:40) Alchemist написал(а):
а местами правила менять не пробовали ? сначала те что для админа, потом те что для всех...

Спустя 1 день, 21 час, 30 минут, 33 секунды (2.10.2008 - 18:11) v3l0m написал(а):
спасибо большое всем за помощь....!
использовал RewriteCond
тему можна закрыть


_____________
дайте тонну кофе, несколько цистерн с пивом и закусь - я напишу вам аффигенную cms'ку
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.