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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: htaccess  (Прочитано 9686 раз)
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? Тогда первый вариант Славы тебе подойдет.
Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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".
Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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, отвечать на вопрос ссылками некрасиво. Типа сами разберитесь, что я там мог узнать. Мало ли, что ты там читал - важно, что ты понял.
Записан

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

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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