[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: mod_rewrite и с чем его едят
ssvih
Из .htaccess видно

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^catalog/(.*) sefriendly.php
</IfModule>

Откуда в ссылке типа http://домен/catalog/ext/порядковый номер статьи/
берется /catalog/ ясно а вот дальше почему и откуда ext не понятно.
sefriendly.php

<?php

include_once ("./_funct.php");

$cat["seabs"]=substr($_SERVER["PHP_SELF"],0,-14);
while (substr($cat["seabs"],-1)=="/") $cat["seabs"]=substr($cat["seabs"],0,-1);

$url=$_SERVER["REQUEST_URI"];

if (substr($url,0,strlen($cat["seabs"]))==$cat["seabs"]) $url=substr($url,strlen($cat["seabs"]));

$url=explode("/",$url);

$seFriendlyOrder=$url[2];

if (substr($url[count($url)-1],-5)==".html")
{
$seFriendlyPage=intval(substr($url[count($url)-1],0,-5));
unset($url[count($url)-1]);
}
else
$seFriendlyPage = 0;

unset($url[0]);
unset($url[1]);
unset($url[2]);


// External link info
if ($seFriendlyOrder=="ext")
{
$_SERVER["QUERY_STRING"] = $url[3];
include "./ext.php";
}
else
// Category
{
$seFriendlyUrl=implode("/",$url);
if (substr($seFriendlyUrl,-1)=="/") $seFriendlyUrl=substr($seFriendlyUrl,0,-1);

$_GET=Array();
if (empty ($cid))
{
$r=mysql_query("SELECT cid FROM ".$db["prefix"]."cat_linear WHERE url='".mysql_escape_string($seFriendlyUrl)."';") or die(mysql_error());
if ($a=mysql_fetch_assoc($r))
$_GET["c"]=$a["cid"];
}
else
$_GET["c"] = $cid;



$_GET["o"] = getOrderStrId($seFriendlyOrder);
$_GET["start"]=intval($seFriendlyPage);

include "./index.php";
}
?>




Спустя 1 день, 5 часов, 25 минут, 50 секунд (6.06.2011 - 08:20) vagrand написал(а):
Вы себе не верно представляете работу модуля mod_rewrite. Он не генерирует ссылки, он лишь сравнивает текущий URL с шаблоном и на основании этого сравнения выполняет или не выполняет какие-то действия. В общем случае вызывает какой-то другой URL.


Спустя 42 минуты, 59 секунд (6.06.2011 - 09:03) Никорагоа написал(а):
Я вот тоже не могу разобраться с ним,вообщем только вот что нашел
про модуль

Спустя 7 часов, 21 минута, 50 секунд (6.06.2011 - 16:25) ssvih написал(а):
Возможно что я не правильно понимаю работу самого скрипта, нашел несколько частей кода где явно видно это самое ext

GLOBAL $cat;
if ($cat["sefriendly"]==1)
return $cat["seabs"]."/".$cat["seprefix"]."/ext/".$resId."/&quo t;;
else
return $cat["seabs"]."/ext.php?".$resId;

и вторая часть

// External link info
if ($seFriendlyOrder=="ext")
{
$_SERVER["QUERY_STRING"] = $url[3];
include "./ext.php";

Не понятно как это все править, думаю нужно создать переменную из запросов БД
В БД есть 10 таблиц 3 из них интересны, а точнее 2 отвечают за категории и одна таблица отвечает за статьи, в таблице main есть lid это и есть порядковый номер статьи, потом есть cat1 значение которого говорит к какой категории или под категории относится статья, в двух других таблица cat и cat_linear
есть cid который означает порядковый номер категории и равен cat1 из main и есть url след вида "hi-tech/network" как можно создать связь между всем этим, зная а точнее имея в ссылке только порядковый номер статьи "lid" и получить из него "url" из другой таблицы?

Спустя 15 минут, 28 секунд (6.06.2011 - 16:40) alex12060 написал(а):
ssvih

Мод реврайт по условию знаешь что делает? Представляешь?
Смотри..

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^catalog/(.*) sefriendly.php
</IfModule>

Ты знаешь регулярные выражения? Нет? Плохо если нет.
Он отрезает все, что понаписали после catalog/ скрипту обработчику - sefriendly.php

Цитата
почему и откуда ext не понятно.


Вы сами писали код? А Вы английский знаете?


// !!!!!!!!!!!External link info!!!!!!!!!
if ($seFriendlyOrder=="ext")
{
$_SERVER["QUERY_STRING"] = $url[3];
include "./ext.php";
}


Цитата
External link info


В общем, разберитесь в коде и сами ответите для себя на вопросы.

Спустя 4 минуты, 18 секунд (6.06.2011 - 16:45) ssvih написал(а):
Я повторно писал что нашел 2 части кода где наблюдается жто самое ext пробовал меня все работает, теперь стоит задача не просто заменить это самое ext на другое подобие в сделать так чтобы вместо ext или чего то там другого стоял адрес каталога! Нужно сделать запрос в БД и создать масив или переменная я не силен в этом

Спустя 13 минут, 37 секунд (6.06.2011 - 16:58) alex12060 написал(а):
Я понимаю, тут пол скрипта придется лопатить. А точнее, все переписывать.
Покажи 2 старые ссылки, ну пример.
И 2-3 новые, как ты хочешь.

Спустя 18 минут, 8 секунд (6.06.2011 - 17:16) ssvih написал(а):
Ссылки на сами статьи полное описание имеют вид
http://001.lc/catalog/ext/8/
http://001.lc/catalog/ext/3/
Где последняя цифра это порядковый номер статьи из БД это lid
Ссылки на категорию имею вид
http://001.lc/catalog/date/hi-tech/
На под категорию
http://001.lc/catalog/date/hi-tech/computers/
А ссылка должна иметь вид
http://001.lc/catalog/date/hi-tech/computers/8/
Если относится к данной под категории
И следующий вид если относиться к категории
http://001.lc/catalog/date/hi-tech/4/

Спустя 8 минут, 28 секунд (6.06.2011 - 17:25) alex12060 написал(а):
Ну, смотри, делай так:


var_dump(explode('/', $_GET));


Что выведет?

http://001.lc/catalog/date/hi-tech/computers/8/ - вот ее используй как пример

Спустя 21 минута, 38 секунд (6.06.2011 - 17:46) ssvih написал(а):
Немного не понял, я выкладывал 2 части кода, одна из
sefriendly.php

// External link info
if ($seFriendlyOrder=="extpr") // Здесь я уже заменил ext на extpr для пробы
{
$_SERVER["QUERY_STRING"] = $url[3];
include "./ext.php";

И вторая часть которую пришлось изменить иначе не работало, находиться в файле
admin/_init.php

function getExtendedInfoUrl($resId)
{
GLOBAL $cat;
if ($cat["sefriendly"]==1)
return $cat["seabs"]."/".$cat["seprefix"]."/extpr/".$resId ."/"; //Здесь я так же заменил ext на extpr все работает на ура, только цель не та )))
else
return $cat["seabs"]."/ext.php?".$resId;
}


Куда ты предлагаешь вставить

var_dump(explode('/', $_GET));

И я честно не понимаю откуда и что именно будет гетать )
Быстрый ответ:

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