[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: опять ЧПУ
tishka
есть урлы вида:


http://www.site.ru/pages/auto.php?search=yes&id=926&page=1

http://www.site.ru/pages/auto.php?search=yes&id=926

http://www.site.ru/pages/auto.php?search=yes

Вопрос: обязательно ли прописывать для всех этих урл отдельные правила modrewrite, или достаточно прописать для самого длинного урла?

Методом пробы выяснил, что вроде если прописать только для самого длинного урла, то для остальных правило работать не будет. Получается, что надо прописывать для всех, или есть какие-то окольные пути? не хочется просто загромождать .htaccess.



Спустя 20 минут, 24 секунды (24.07.2010 - 14:47) vasa_c написал(а):
Покажите ваш метод пробы

Спустя 2 часа, 12 минут, 44 секунды (24.07.2010 - 16:59) KaFe написал(а):

Спустя 1 час, 1 минута, 29 секунд (24.07.2010 - 18:01) Ice написал(а):
уж сколько было этого мод-реврайта. Тьма-тьмущая.

Спустя 20 часов, 53 минуты, 15 секунд (25.07.2010 - 14:54) tishka написал(а):
Цитата
Покажите ваш метод пробы


Вот так работает:


RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /pages/auto.php?search=$1&id=$2&page=$3 [L]


Проблема в том, что очень много таких файлов (auto.php, auto_firm.php и т.д.), и еще больше разных параметров и их значений к эти файлам. Неужели надо для каждого отдельно случая писать свое правило? Например, в случае выше Урл может быть с параметром page и без него. Получается, надо писать


RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /pages/auto.php?search=$1&id=$2&page=$3 [L]
RewriteRule ^([^/]*)/([^/]*)$ /pages/auto.php?search=$1&id=$2 [L]


Так или нет?

Знаю, что не совсем все понял в этом modrewrite, прошу направить в правильное русло )))

Спустя 12 минут, 29 секунд (25.07.2010 - 15:07) KaFe написал(а):
tishka чем тебе способ описанный в википедии не нравится??

Спустя 28 минут, 16 секунд (25.07.2010 - 15:35) tishka написал(а):
Цитата
ishka чем тебе способ описанный в википедии не нравится??


На самом деле чисто интуитивно он мне нарвится, даже скажу, что в файле .htaccess на сайте, сделанном на drupal, примерно такая же конструкция:


RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


Проблема в том, что упорно не могу врубиться в этот метод, в икипедии только общие слова. Где можно почитать именно про это? Или может кто-нибудь свомим словами вкратце объяснит? blink.gif huh.gif

Спустя 7 минут, 24 секунды (25.07.2010 - 15:42) Ice написал(а):
Одна точка входа - все запросы к серверу передаются на index.php

Спустя 6 часов, 35 минут, 45 секунд (25.07.2010 - 22:18) tishka написал(а):
Потихоньку начинаю въезжать, но не совсем еще, сильно не бейте, трудно дается ))) Нашел интересную статью, должна быть интересна таким же страждущим, как и я (ну очень хочется перейти на ЧПУ )))

http://wm-help.net/my-articles/article/mod_rewrite2.htm

Давайте, сейчас расскажу, как я понял, а вы потом поправите если что. В общем, есть файл index.php, или любой другой, как сам назовешь, на который идут все ссылки. Этот файл все ссылки обрабатывает. Дальше не так всё хорошо )) Например, не понятно, в каком виде приходят ссылки на Index.php:

В таком: http://www.site.ru/pages/auto.php?search=yes&id=926&page=1
Или в таком: http://www.site.ru/auto/yes/926/1

Потом, если например я хочу загрузить страницу http://www.site.ru/pages/auto.php?search=yes&id=926&page=1, мне нужно будет вызывать это:
index.php?search=yes&id=926&page=1? Или как? И что потом? Блин, правда, не могу уловить сути...

Спустя 3 минуты, 56 секунд (25.07.2010 - 22:22) twin написал(а):
Посмотри тут, правда не уверен, что поможет. Если нет, попробую растолковать. Потом статью поправлю.

Спустя 5 минут, 25 секунд (25.07.2010 - 22:27) KaFe написал(а):
tishka я делаю так.
определяю например адрес сайта и папку на данный момент,предположим у нас
http://www.site.ru/pages/

потом смотрим ссылку, она у нас например такая
http://www.site.ru/pages/auto.php?search=yes&id=926&page=1

или такая
http://www.site.ru/pages/yes/926/1

применяем str_replace, в итоге получаем
auto.php?search=yes&id=926&page=1

или
yes/926/1

соответственно, потом применяешь алгоритмы всякие там и вытягиваешь данные

Но есть маленькое замечание, у меня всю всегда в index.php нету auto.php, bibi.php,gugu.php потому такой метод мне подходит бес проблем, в случае когда таких страниц больше одной то тут уже реврайты писать

Спустя 3 минуты, 2 секунды (25.07.2010 - 22:30) inpost написал(а):
tishka
http://www.site.ru/pages/auto.php?search=yes&id=926&page=1
http://www.site.ru/pages/auto.php?search=yes&id=926
http://www.site.ru/pages/auto.php?search=yes

Одним скриптом? Я тоже задавал похожий вопрос на этом форуме, и мне так и не ответили! Пришлось сделать вместо одного условия, сразу 3 =(, где первый был для одной переменной, второй для двух и третий для трех!

Теперь по твоему вопросу:
site.ru/index.php?page=INDEX, site.ru/index.php?page=AUTO, site.ru/index.php?page=ARTICLES. По одной формуле все ссылки переводишь в нужный формат. Ссылки делаешь уже в переделанном стиле!
http://www.site.ru/pages/auto.php?search=yes&id=926&page=1 - вот эту ссылку меняешь на: index.php?page=auto&search=yes&id=926&page=1. С индекса уже и идет обработка. В центральное место, которое будет менять контекст вставляешь просто include($_GET['page']".php"); и уже на странице "auto.php" вставляешь весь контент.

Спустя 3 минуты, 28 секунд (25.07.2010 - 22:34) twin написал(а):
Цитата
Пришлось сделать вместо одного условия, сразу 3

А если будет 4?

Спустя 8 минут, 6 секунд (25.07.2010 - 22:42) inpost написал(а):
twin Когда-нибудь истина прийдет ко мне, все приходит с опытом. На самом деле спрашивал этот вопрос я недели 2 назад, но никто не ответил =(
Вот похожая ситуация, вот сам реврайт:
RewriteRule ^vipusk/([^/]*)\.html$ /index.php?page=vipusk&pages=$1
RewriteRule ^cat/([^/]*)\.html$ /index.php?page=cat_view&id=$1
RewriteRule ^([A-Za-z0-9_^/]+).html$ /index.php?page=$1 [QSA,L]

Как видишь, в одном месте просто page, в другом page и id, в третьем page и pages.

Я был бы тоже примного благодарен, если бы мне кто-нибудь помог с этой проблемой. Чтоб в одной формуле можно было бы записать: page, id, pages, и это действовало даже если есть лишь часть их.

Спустя 6 минут, 14 секунд (25.07.2010 - 22:48) twin написал(а):
Истина где то рядом... Сначала нужно ответить на вопрос:
Для чего создавать такие сложные запросы?

Ответ наверняка не последовал потому, что ни у кого не вызвал практического интереса. Это примерно так же, как спросить - а можно ли стоя на голове левой ногой дотянуться до правого уха?

Если исхитриться и позвать йога - наверно можно. Надо ли оно?

Спустя 2 минуты, 12 секунд (25.07.2010 - 22:50) inpost написал(а):
twin А в чем запрос сложный? Прости меня, веду я себя как ребёнок =)

Спустя 16 минут, 31 секунда (25.07.2010 - 23:07) twin написал(а):
Не нужно извиняться. Самый глупый вопрос - не заданный вопрос.

А сложный запрс уже только потому, что ты не смог сам разобраться.
Вот давай по порядку. Откуда такая ссылка
Цитата
vipusk/чёртичё.html

и потом такая
Цитата
cat/чёртичё.html
?

Закономерно предположить, что у тебя схема без точки входа. А коли так, зачем ты пытаешься обработать все одним правилом? Чтобы меньше писать?

Так вот это совершенно неверно. Никакого выигрыша по скорости не будет, а читабельность убивается наповал.
Лучше один раз написать немного больше букв, чем много раз потом разбирать ребусы.

У топикстартера вопрос был несколько иного рода. Ему как раз нужна точка входа. Там правило простое. А дальше разбор лучше делать на стороне php.

Хотя если чесно, слал бы я лесом весь этот рерайт. От него одни неприятности. Очередная попытка упростить простое жертвуя многим.

Спустя 10 минут, 9 секунд (25.07.2010 - 23:17) tishka написал(а):
twin, к поиску истины присоединяется тяжелая артиллерия (в хорошем смысле этого слова), теперь точно разберемся wink.gif


inpost, ну вот, давай здесь вместе разбираться. оказывается, я не один такой ))) Хотя, по твоему посту, я так понял, ты уже разобрался.


Цитата
Но есть маленькое замечание, у меня всю всегда в index.php нету auto.php, bibi.php,gugu.php потому такой метод мне подходит бес проблем, в случае когда таких страниц больше одной то тут уже реврайты писать


KaFe, спасибо конечно, но не путай меня окончательно smile.gif И так сложно в голове выстроить всю цепочку ))

В общем, в принципе, всё понятно. Получается, в index.php будет что-то типа того:


include('../template/head.tpl');
include($_GET['page']".php");
include('../template/footer.tpl');


Да?

И, получается, всё что написано на http://wm-help.net/my-articles/article/mod_rewrite2.htm нужно забыть? Я про массивы, очистку массивов.

Спустя 11 минут, 50 секунд (25.07.2010 - 23:29) KaFe написал(а):
tishka я не пытался, просто у меня одна точка входа, потому у меня все тремя строчками можно реализовать
Цитата (twin @ 25.07.2010 - 20:07)
А дальше разбор лучше делать на стороне php.

вот тут совершенно правильно

Спустя 9 минут, 34 секунды (25.07.2010 - 23:38) twin написал(а):
Цитата
И, получается, всё что написано на http://wm-help.net/my-articles/article/mod_rewrite2.htm нужно забыть? Я про массивы, очистку массивов.

Не вникал, ибо пиво и не надо. Но мельком могу сказать - да.
Если человек не знеает о array_map() и втюхивает вместо того цикл... Стоит задуматься.

Спустя 8 минут, 13 секунд (25.07.2010 - 23:47) twin написал(а):
tishka
Цитата
Но есть маленькое замечание, у меня всю всегда в index.php нету auto.php, bibi.php,gugu.php потому такой метод мне подходит бес проблем, в случае когда таких страниц больше одной то тут уже реврайты писать

Это чей афоризм?
Автора!
Только медленно и степенно теперь... Казнить нельзя помиловать...

Спустя 27 минут, 21 секунда (26.07.2010 - 00:14) KaFe написал(а):
twin ну что издеваться то laugh.gif , просто я не знал что можно просто сказать ТОЧКА ВХОДА.

Спустя 9 часов, 30 минут, 22 секунды (26.07.2010 - 09:44) tishka написал(а):
Цитата
Теперь по твоему вопросу:
site.ru/index.php?page=INDEX, site.ru/index.php?page=AUTO, site.ru/index.php?page=ARTICLES. По одной формуле все ссылки переводишь в нужный формат. Ссылки делаешь уже в переделанном стиле!
http://www.site.ru/pages/auto.php?search=yes&id=926&page=1 - вот эту ссылку меняешь на: index.php?page=auto&search=yes&id=926&page=1. С индекса уже и идет обработка. В центральное место, которое будет менять контекст вставляешь просто include($_GET['page']".php"); и уже на странице "auto.php" вставляешь весь контент.


Вчера было обрадовался, что так всё просто. Сегодня опять вопросы возникли (( Так в каком все-таки виде будет ссылка, которая сейчас, без modrewrite, в скрипте прописана как http://www.site.ru/pages/auto.php?search=yes&id=926&page=1 ? Ты пишешь, если я правильно понял, в таком:

Цитата
index.php?page=auto&search=yes&id=926&page=1


Но по идее в скрипте данная ссылка должна иметь вид

http://www.site.ru/auto/yes/926/1


Разве не так?

Спустя 57 минут, 29 секунд (26.07.2010 - 10:42) KaFe написал(а):
Код убран

Спустя 30 минут, 48 секунд (26.07.2010 - 11:13) twin написал(а):
С матчастью слабовато у тебя... Почитай про parse_url() и parse_str()

Спустя 2 часа, 22 минуты, 11 секунд (26.07.2010 - 13:35) tishka написал(а):
По ходу, не получится у меня это реализовать. На index.php приходит get параметр с значением, например: auto/3/2/5

Конечно, можно разбить это всё с помощью explode и вытащить первый параметр auto, и на основе него уже обращаться к странице auto.php. На этом вся стандартизация заканчивается, ибо к каждому файлу могут быть совершенно разные запросы. Даже если учесть, что в файле auto можно сделать обработку такого get значения, всё равно не понятно, как скрипт поймет, что

3 это значение $_GET['par1']
2 это значение $_GET['par2']
5 это значение $_GET['par3']

Ведь запрос может быть и такой:

auto/yes/1

Спустя 6 минут, 23 секунды (26.07.2010 - 13:41) KaFe написал(а):
tishka Я вам больше не помощник, если вы даже в током детском вопросе не фига не поняли. sad.gif Код удаляю, не хочу что бы тут светился biggrin.gif

P.S: Умываю руки wink.gif

Спустя 24 минуты, 19 секунд (26.07.2010 - 14:05) tishka написал(а):
KaFe, ну вы же пишите в конце вечно, что это подходит вам, а мне с моими auto.php и другими файлами надо по-другому. Вот я и не вникал особо в ваш код. Можно еще раз в личку скинуть? biggrin.gif Я уже сам в шоке, планировал к воскресенью полностью перейти на чпу, фиг там ((

Спустя 5 минут, 18 секунд (26.07.2010 - 14:11) KaFe написал(а):
tishka делайте одну точку вхождения и не будет проблем wink.gif Код скину в личку

Спустя 6 часов, 53 минуты, 1 секунда (26.07.2010 - 21:04) tishka написал(а):
KaFe, twin спасибо большое. Буду разбираться

Быстрый ответ:

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