|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 22-09-2012 05:25 » |
|
Такой URL вызовет 404 ошибку. Следовательно тебе нужно переписать ссылку на свой обработчик ошибки. И в обработчике уже анализировать и переправлять URL.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sla
|
|
« Ответ #2 : 22-09-2012 05:45 » |
|
Finch, не путай парня
Rewriterule ^uslugi/transport/(.*) index.php?action=$1 [NC, QSA,L]
Нужно правильно понимать ЧПУ откуда взялись uslugi/transport/ ? Из-за категорий? а как быть например с такой конструкцией? /usligi/NeTransport/
тогда правило может выглядеть
Rewriterule ^uslugi/(.*)/(.*) index.php?category=$1&action=$2$ [NC, QSA,L]
|
|
« Последнее редактирование: 22-09-2012 05:50 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Avdey
Участник
Offline
|
|
« Ответ #3 : 22-09-2012 06:29 » |
|
Не создавате головняка=) Такой URL вызовет 404 ошибку. Следовательно тебе нужно переписать ссылку на свой обработчик ошибки. И в обработчике уже анализировать и переправлять URL.
Ни кого не нужно переписывать, просто прописать в .htaccess чтоб в переменую заносился конец URL`a до знака "/" и перенаправлялся на страницу index.php?action=(эта переменная) Finch, не путай парня
Rewriterule ^uslugi/transport/(.*) index.php?action=$1 [NC, QSA,L]
Нужно правильно понимать ЧПУ откуда взялись uslugi/transport/ ? Из-за категорий? а как быть например с такой конструкцией? /usligi/NeTransport/
тогда правило может выглядеть
Rewriterule ^uslugi/(.*)/(.*) index.php?category=$1&action=$2$ [NC, QSA,L]
Вот именно не путай меня=)) Я всё прекрасно понимаю, но и поймите меня, расскажу полностью проблему. Делаю кмс, пока это жалкое подобие, для сайта визитки пока, а дальше больше. Так вот все страницы делаются в админке, есть подразделы, разделов, (ну эт уже не визитка) хотите зайдите гляньте: http://sparta-logistic.ru/management/ логин и пасс test Всё ссылки хранятся в бд, у каждой есть столбец action и link = путь этой ссылки, если у нас есть www.sitename.ru/uslugi/transport/catalogто action = catalog то link на эту ссылку = uslugi/transport. uslugi/transport добавляется в БД в столбец link когда создаётся раздел. но это не важно=) Главное чтоб произошёл редирект на index.php?action=catalog так как если я буду делать как сказал Sla то представь мне что прописывать каждый раз в .htaccess что ему делать, а эти ссылки меняются в админке мгновенно и что...всё слетело. Я хочу чтоб .htaccess брал нажатый URL, отрезал конец до / говорил что это $1 ну и дальше перенаправлял на index.php?action=$1 А уже файл index.php в который подключается контент (content.php) работал с полученной переменной, вытягивал все данные по ней из БД и отображал на странице=) Всё элементарно!) Только как это сделать?
|
|
« Последнее редактирование: 22-09-2012 06:37 от Avdey »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #4 : 22-09-2012 06:35 » |
|
Avdey, если я правильно понял, "uslugi/transport" является статической частью URL? Тогда первый вариант Славы тебе подойдет.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #5 : 22-09-2012 06:38 » |
|
Avdey, ничего не понял... Попробуй рассказать еще раз
Далее, пока не поздно потом переделывать будет дороже Покажи модель страницы, то что сейчас - это УГ, ты многого, скорей всего, не понимаешь, или не предусмотрел
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Avdey
Участник
Offline
|
|
« Ответ #6 : 22-09-2012 06:42 » |
|
Avdey, если я правильно понял, "uslugi/transport" является статической частью URL? Тогда первый вариант Славы тебе подойдет.
Перечитай мой пост, я дописал, первый вариант не поможет, так как человек захочет в админке поменять action ссылки с transport на transport_1, ну и пойдут у меня по сайту автоматом "uslugi/transport_1" а в .htaccess прописано то ^uslugi/transport и всё сломалось=)
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #7 : 22-09-2012 06:45 » |
|
Есть два способа обработки ЧПУ с помощью htccess и программного
Rewriterule ^uslugi/transport/(.*) index.php?action=$1 [NC, QSA,L] Вот этот хорош, на уже существующем проиндесированном сайте, но никак на новом представь себе, что тебе понадобится добавлять еще ветки твоего дерева?
наиболее приемлемым, возможно будет третий вариант
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
и уже в контроллере обрабатывать $_GET['page'] 1. Разобрать строку запроса 2. Построить иерархию категорий 3. Выполнить действие (вызвать соответствующий контроллер)
Под контроллером я понимаю, обработчик запросов.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Avdey
Участник
Offline
|
|
« Ответ #8 : 22-09-2012 06:50 » |
|
Да что тут не понятного, вот этот вариант не подходит: Rewriterule ^uslugi/transport/(.*) index.php?action=$1 [NC, QSA,L]
Так как не будет на сайте статических частей ссылок, они все могут меняться. Так что забыли про этот вариант!!! Далее, допустим есть ссылка на странице www.sitename.ru/uslugi/transport/catalog посетитель нажал на неё и скажите что мне нужно прописать в .htaccess чтоб его перенесло на www.sitename.ru/index.php?action=catalog а в строке URL осталось www.sitename.ru/uslugi/transport/catalogКак-то так!
|
|
« Последнее редактирование: 22-09-2012 06:53 от Avdey »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #9 : 22-09-2012 06:53 » |
|
Ну вот же Rewriterule ^.*/(.*) index.php?action=$1 [NC, QSA,L] И волки целы и овцы сыты
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #10 : 22-09-2012 07:00 » |
|
Avdey, непонимание задачи - первый признак отсутствия стадии проектирования.
Чтобы не переписывать правила rewrire каждый раз при изменениях в настройках сайта, воспользуйся советом Finch и разбирай запрос самостоятельно. Для корректной работы 404 в DocumentRoot не должно быть цепочки директорий "uslugi/transport".
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|
Sla
|
|
« Ответ #12 : 22-09-2012 07:05 » |
|
ну... блин... я писал с головы, не проверяя мог и ошибиться, проверяй на локалке
Rewriterule ^(.+)/(.*) index.php?action=$2 [NC, QSA,L]
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #13 : 22-09-2012 07:08 » |
|
RXL, не надо обрабатывать исключение, проще и понятней, а самое главное наглядней
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
Я однажды чуть моск не снес, чтоб найти контроллер в случае обработчика ошибки
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Avdey
Участник
Offline
|
|
« Ответ #14 : 22-09-2012 07:15 » |
|
RXL, не надо обрабатывать исключение, проще и понятней, а самое главное наглядней
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
Я однажды чуть моск не снес, чтоб найти контроллер в случае обработчика ошибки
Попробывал ваш вариант, работает с корневыми разделами, а как только пошли в глуб то вот что получается http://sparta-logistic.ru/uslugi/avtomobilne_perevozkiжмите смотрите.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #15 : 22-09-2012 07:18 » |
|
Что ты знаешь об относительных и абсолютных путях?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Avdey
Участник
Offline
|
|
« Ответ #16 : 22-09-2012 07:21 » |
|
Rewriterule ^(.+)/(.*) index.php?action=$2 [NC, QSA,L] этот вариан вообще не робит. Я как понимаю что скобки говорят о переменной, так зачем писать два раза скобки? Мы же в переменную записываем только конец. Может нужно так Rewriterule ^.*/(.*)$ index.php?action=$1 [NC, QSA,L] Сейчас попробую Добавлено через 4 минуты и 56 секунд:Что ты знаешь об относительных и абсолютных путях?
вот что http://phpfaq.ru/paths =)))
|
|
« Последнее редактирование: 22-09-2012 07:26 от Avdey »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #17 : 22-09-2012 07:30 » |
|
Avdey, отвечать на вопрос ссылками некрасиво. Типа сами разберитесь, что я там мог узнать. Мало ли, что ты там читал - важно, что ты понял.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #18 : 22-09-2012 07:39 » |
|
Avdey, что в этой ссылке, о каких путях идет речь и где?
Rewriterule ^(.*)$ index.php?action=$1 [NC, QSA,L] Кстати, вот это правило - и создают твою проблему
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Avdey
Участник
Offline
|
|
« Ответ #19 : 04-10-2012 05:23 » |
|
Что ты знаешь об относительных и абсолютных путях?
Относительный путь, это путь от места(файла) в котором мы вызываем этот путь(ссылку) пример: ../../uslugi.php - вернуться по каталогу два раза назад и там будет файл uslugi.php Абсолютный путь, это путь прописанный целиком из корня системы, в данном случаи из корня сайта. Я тут пересмотрел свои мысли по поводу htaccess и понял что не туда смотрел. Что мне нужно прописать в htaccess если я имею ссылки на сайте вот такого типа sparta-logistic.ru/startovaya sparta-logistic.ru/uslugi sparta-logistic.ru/startovaya/news sparta-logistic.ru/startovaya/news/pervoya_novost чтоб он брал всё что после sparta-logistic.ru/ и определял в переменную action зарание перенаправляя на sparta-logistic.ru/index.php -> startovaya -> uslugi -> startovaya/news -> startovaya/news/pervoya_novost Rewriterule ^(.*)$ index.php?action=$1 [NC, QSA,L]
Не работает.... А потом буду работать с action по средством функций php explode(), заносить её в массив, перебирать его и брать последний элемент и уже по нему выводить страницу из БД.
|
|
« Последнее редактирование: 04-10-2012 05:29 от Avdey »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #20 : 04-10-2012 05:47 » |
|
Rewriterule ^(.*)$ index.php?action=$1 [NC, QSA,L]
Не работает....
Чтоб дать ответ, одной строки мало. До этого тоже есть правила.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Avdey
Участник
Offline
|
|
« Ответ #21 : 04-10-2012 05:51 » |
|
RewriteEngine on Rewriterule ^(.*)$ index.php?action=$1 [NC, QSA,L]
Чтоб дать ответ, одной строки мало. До этого тоже есть правила. Вот так?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #22 : 04-10-2012 08:52 » |
|
Не верю!!!
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?page=$1 [QSA,NE,L]
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|