Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как применить mod_rewrite к существующему сайту 
:(
    Опции темы
kulikoff
Дата 11.5.2011, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



У меня такая ситуация: есть интернет-магазин, в котором урлы выглядят примерно так:
Код

http://www.mysite.com/good.php?good_id=5235&category_id=43


Стоит задача переделать как-то так, чтоб этот же урлы выглядел, как положено:
Код

http://www.mysite.com/good/5235/43


Вопрос: как это сделать или где-то можно получить исчерпывающую инфу про мой конкретный случай, а не о моде вобще и в принципе?
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 11.5.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ссылки ты делаешь сам. если магазин, как CMS, генерирует ссылки в автоматическом режиме, то нужно смотреть в настройки магазина, где задать новый шаблон ссылок, либо просто поставить галочку "использовать ЧПУ"

mod_rewrite нужен, когда кто-нибудь приходит по ссылке, тут надо распознать /good/5235/43 и отправить по адресу /good.php?good_id=5235&category_id=43

самый простой способ - перекидывать всех прямо в корень:

Код

RewriteEngine on

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


таким макаром все не найденные пути будут вести на http://www.mysite.com/index.php
а в файле index.php уже можно вытащить путь из $_SERVER['REQUEST_URI'], распарсить его и по полученным данным произвести подключение нужного модуля


но вообще, задача очень специфическая для движка. в общем плане не решается, и можно запороть весь движок
PM MAIL WWW   Вверх
ksnk
Дата 11.5.2011, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(kulikoff @  11.5.2011,  13:16 Найти цитируемый пост)
есть интернет-магазин,

Все зависит от того, насколько он "правильно" сделан. В правильном магазине все ссылки формируются централизованно. В обычном - как получилось.

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

Код

function link2chpu($m){
  $result=$m[2]; 
  $url=array();
  mb_parse_str($m[3],$url);
  foreach($url as $k=>$v)
    $result.='/'.$k.'/'.$v;

  return $m[1].'="'.$result.$m[4].'"';
}

function convert_href($s){
    return preg_replace_callback(
       '~(href|action)="(.*?)\?(.*?)(\#.*?)?"~',
       'link2chpu',$s);
}

ob_start('convert_href');

//$url='a href="xx?yy=zz&aa=bb#gohome"';
//$url='a href="xx"';
//$url='a href="xx?yy=zz"';
//echo $url.'<br>'.convert_href($url);


функцию link2chpu следует допилить напильником по месту. Да и варнинги, которые при ее выполнении формируются неплохо бы отработать.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
Дата 11.5.2011, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Код

RewriteRule ^/good/(.*)/(.*)/$    /good.php?good_id=$1&category_id=$2[L]


вроде так

Добавлено @ 15:54
Я пользуюсь методом как сказал bars80080 только у меня это делает 1 файл
Код

 RewriteCond %{REQUEST_FILENAME} !/core/modrewrite.php$   # список реврайтов
 RewriteRule ^(.*)$ /core/core-modrewrite.php [L]

файл со структурой modrewrite.php...

 $Rewrite = array( array('RULE_EX'=> '#^/([a-z0-9\_]+)/([a-z0-9\_]+).html#' , 'RULE'=>'action=$1&fid=$2'  ,  'URL'=>'/index.php')  );

файл core-modrewrite.php 

обработка идет через перебор массива если нашли то include файл
Код

  $url = preg_replace($val["RULE_EX"], (strlen($val["URL"]) > 0 ? $val["URL"]."?" : "").$val["RULE"], $_SERVER["REQUEST_URI"]);







Это сообщение отредактировал(а) Sanchezzz - 11.5.2011, 15:55


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.