Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: htaccess  (Прочитано 9332 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Avdey
Участник

ru
Offline Offline

« : 22-09-2012 04:54 » 

Доброго времени суток!

У меня следующая задача.

На сайте все ссылки имеют вид ЧПУ например:

www.sitename.ru/uslugi/transport/catalog

Что мне прописать в файле .htaccess чтоб он перенаправлял данный Url на www.sitename.ru/index.php?action=catalog ?

то есть брал бы последнюю переменную до знака /  и подставлял её в action чтоб потом через GET с ней работать.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 22-09-2012 05:25 » 

Такой URL вызовет 404 ошибку. Следовательно тебе нужно переписать ссылку на свой обработчик ошибки. И в обработчике уже анализировать и переправлять URL.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Участник

ru
Offline 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 22-09-2012 06:35 » 

Avdey, если я правильно понял, "uslugi/transport" является статической частью URL? Тогда первый вариант Славы тебе подойдет.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 22-09-2012 06:38 » 

Avdey, ничего не понял...
Попробуй рассказать еще раз

Далее, пока не поздно
потом переделывать будет дороже
Покажи модель страницы, то что сейчас - это УГ, ты многого, скорей всего, не понимаешь, или не предусмотрел


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Avdey
Участник

ru
Offline Offline

« Ответ #6 : 22-09-2012 06:42 » 

Avdey, если я правильно понял, "uslugi/transport" является статической частью URL? Тогда первый вариант Славы тебе подойдет.

Перечитай мой пост, я дописал, первый вариант не поможет, так как человек захочет в админке поменять action ссылки с transport на transport_1, ну и пойдут у меня по сайту автоматом "uslugi/transport_1" а в .htaccess прописано то ^uslugi/transport и всё сломалось=)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Участник

ru
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 22-09-2012 06:53 » 

Ну вот же
Rewriterule ^.*/(.*) index.php?action=$1 [NC, QSA,L]
И волки целы и овцы сыты
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 22-09-2012 07:00 » 

Avdey, непонимание задачи - первый признак отсутствия стадии проектирования.

Чтобы не переписывать правила rewrire каждый раз при изменениях в настройках сайта, воспользуйся советом Finch и разбирай запрос самостоятельно. Для корректной работы 404 в DocumentRoot не должно быть цепочки директорий "uslugi/transport".
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Avdey
Участник

ru
Offline Offline

« Ответ #11 : 22-09-2012 07:00 » 

Прописал не работает, взгляните www.sparta-logistic.ru
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 22-09-2012 07:05 » 

ну... блин...
я писал с головы, не проверяя мог и ошибиться, проверяй на локалке

Rewriterule ^(.+)/(.*) index.php?action=$2 [NC, QSA,L]
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 22-09-2012 07:08 » 

RXL, не надо обрабатывать исключение, проще  и понятней, а самое главное наглядней

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]

Я однажды чуть моск не снес, чтоб найти контроллер в случае обработчика ошибки
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Avdey
Участник

ru
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 22-09-2012 07:18 » 

Что ты знаешь об относительных и абсолютных путях?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Avdey
Участник

ru
Offline 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 22-09-2012 07:30 » 

Avdey, отвечать на вопрос ссылками некрасиво. Типа сами разберитесь, что я там мог узнать. Мало ли, что ты там читал - важно, что ты понял.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 22-09-2012 07:39 » 

Avdey, что в этой ссылке, о каких путях идет речь и где?

Rewriterule ^(.*)$ index.php?action=$1 [NC, QSA,L]
Кстати, вот это правило - и создают твою проблему

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Avdey
Участник

ru
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 04-10-2012 05:47 » 

Цитата
Rewriterule ^(.*)$ index.php?action=$1 [NC, QSA,L]


Не работает....
Чтоб дать ответ, одной строки мало.
До этого тоже есть правила.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Avdey
Участник

ru
Offline Offline

« Ответ #21 : 04-10-2012 05:51 » 

Цитата
RewriteEngine   on
Rewriterule ^(.*)$ index.php?action=$1 [NC, QSA,L]
Чтоб дать ответ, одной строки мало.
До этого тоже есть правила.


Вот так?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 04-10-2012 08:52 » new

Не верю!!!

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA,NE,L]
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines