[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ЧПУ
asdf27
Доброго времени, форум. Вопрос в том, чтобы сделать ЧПУ.

Например, вот этот урл: http://joysea.ru/place.php?place_id=3&hotels=1

Я хочу привести его к виду http://joysea.ru/lazarevskoe/gostinitsa/ . Подглядев на другой сайт, я напишу конструкцию вида
Цитата
RewriteRule ^(.*)lazarevskoe/(.*)$ $1place.php?place_id=3$2

вот тут смотрел

Но теперь картинки не выводятся. К каждой ссылке на картинку придется добавлять ../../ ?

Это что касается .htaccess. Также у меня вопрос по хранению урла в базе, но о нем чуть дальше, как с .htaccess поясните.
SerginhoLD
Цитата (asdf27 @ 3.11.2014 - 20:15)
Но теперь картинки не выводятся. К каждой ссылке на картинку придется добавлять ../../ ?

просто надо что угодно подключать от корня сайта, тогда проблем никогда не будет
<img src="/image.jpg">
<!-- слэш в начале пути, значит от корня -->


_____________
"internet explorer всех правильней отображает страницы" ©
asdf27
Спасибо, дельное замечание. Теперь вопрос, чем дополнить эту строку:
RewriteRule ^lazarevskoe/$ place.php?place_id=3 [NC,L]
чтобы в меню (и все ссылки, содержащие кусок place.php?place_id=3) изменились на ^lazarevskoe$ ?
Arh
asdf27
Это же не так работает.

В .htaccess вы говорите серверу как обрабатывать запросы, то есть если обратились по такому адресу localhost/lazarevskoe, то считать его таким localhost/place.php?place_id=3

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
asdf27
С помощью rewriteCond я не смогу поменять ссылки? Мне надо их прописывать (обновлять) в коде? (либо базе).
Arh
asdf27
Да, .htaccess обрабатывает запросы к серверу.
А html, где прописаны ваши ссылки это ответ сервера, который отображается в браузере.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
asdf27
Ковыряю, ковыряю... Например, такой урл http://joysea.ru/place.php?place_id=3&hotels&hotel=50

1. Этот участок place.php?place_id=3 я преобразовал в /lazarevskoe/ следующей командой
RewriteRule ^lazarevskoe/$ place.php?place_id=3 [L]

Как должны выглядеть GET-переменные?
http://joysea.ru/lazarevskoe/&hotels&hotel=50 отдает 404


2. Могу я по кускам собрать преобразование переменных? Для каждой GET-переменной апач будет выстраивать урл из кусочков? Например:

Исходная строка: http://joysea.ru/place.php?place_id=3&hotels&hotel=50

Участок 1: RewriteRule ^lazarevskoe/$ place.php?place_id=3 [L]

Участок 2 RewriteRule ^hotel50.htm/$ hotels&hotel=50 [L]

В итоге соберется строка http://joysea.ru/lazarevskoe/hotel50.htm ?

3. Как минимум, в .htaccess пропишу не менее 120 условий как выше. Апач не будет спотыкаться?

4. Куда девать амперсанд (&) между участком 1 и участком 2 ?

5. Со старых урлов (с переменными) на новые (словами, ЧПУ) нужно делать 301 редирект?
sergeiss
Если честно, то не вникал во все тонкости.

Цитата (asdf27 @ 10.11.2014 - 03:12)
Как должны выглядеть GET-переменные?
http://joysea.ru/lazarevskoe/&hotels&hotel=50 отдает 404

Но вот это точно надо не так делать. Потому что у тебя смесь ЧПУ и не-ЧПУ получается. Красивая ссылка с ЧПУ будет в данном случае вот такой: http://joysea.ru/lazarevskoe/hotels/50
И вот уже ее преобразуй во что-нибудь типа более понятное для скриптов.

В качестве подсказки могу дать 2 строки из работающего htaccess
RewriteCond $1 !^(index\.php|img|css|js|robots\.txt|favicon\.ico|missing\.php|test|index\.html)
RewriteRule ^(.*)$ /index.php?path=$1&%{QUERY_STRING}

Вторая строка позволяет почти все запросы (кроме указанных в первой строке) направить в файл index.php, при этом всё, что было там написано после корня сайта, записывается в $_GET['path'], а все имевшиеся ГЕТ-параметры живьем передаются дальше.
Например, в случае вот этой строки http://joysea.ru/lazarevskoe/hotels/50 я бы получил внутри index.php
$_GET['path'] == 'lazarevskoe/hotels/50'

эту строку можно разобрать на части и вызвать нужные скрипты-обработчики.

Довесок %{QUERY_STRING} нужен на всякий случай, если понадобится все-таки дописать ГЕТ-параметры.


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
Цитата (sergeiss @ 10.11.2014 - 04:27)
Довесок %{QUERY_STRING} нужен на всякий случай, если понадобится все-таки дописать ГЕТ-параметры.

ненужен, для этого есть флаг QSA
asdf27
Цитата
эту строку можно разобрать на части и вызвать нужные скрипты-обработчики.

А как быть с редиректами? Например, index.php?cat=1

Разбираю, вижу что только рубрика, перенаправляю на rubrika/. GET-переменные передадутся?
Быстрый ответ:

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