[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создать короткую url в динамике выборки из таблицы
Страницы: 1, 2, 3, 4, 5
killer8080
я вижу вы совсем не понимаете суть реврайтов. Смысл в том что это внутренний редирект. Снаружи серверу приходит запрос вида
http://www.mydomain.com/bed/2654
апач ищет в директории сайта файл .htaccess, использует его как динамический файл конфигурации, который обрабатывается при каждом запросе, и позволяет индивидуально задавать конфигурацию, для хоста и директории. Директива RewriteEngine On включает движок внутренних редиректов. Дальше запрос проверяется на соответствие условий.
RewriteCond %{REQUEST_FILENAME} !-f - запрошенный файл не является файлом
RewriteCond %{REQUEST_FILENAME} !-d - запрошенный файл не является директорией
далее ури проверяется на соответствие регулярному выражению, если совпало, выполняется соответствующее преобразование, так, как если бы запрос изначально выглядел как
index.php?cart=0&promo=yes&category=92&id=
RewriteRule bed/(\d+) index.php?cart=0&promo=yes&category=92&id=$1 [L,QSA]
скрипт получает измененный запрос, как будто и не было никакого чпу. Для браузера процесс происходит скрытно, о наличии такого редиректа он ничего не знает, т.к. это внутренний редирект, а не внешний.
Надеюсь объяснил доходчиво smile.gif
skolozhabskiy
да, это понятно, но тогда мне не понятно для чего нужен $_GET['request'] и зачем с помощью разбития и сборки из его элементов короткого url получать последний и куда его далее применять. совершенно не понятны действия после получения $_GET['request'] после клика на ссылку. допустим кликнули на ссылку, получили $_GET['request'], разбили, сложили строку и что дальше с ней делать? вы можете привести пример?

спасибо
arlamar
killer8080
Диву даюсь Вашему терпению)
killer8080
Цитата (skolozhabskiy @ 19.03.2013 - 16:19)
да, это понятно, но тогда мне не понятно для чего нужен $_GET['request']

для универсальности. В первом варианте под каждый вид ссылки придется писать индивидуальные правила в .htaccess, во втором все несуществующие запросы отправляем в index.php, а там он уже сам решает как их обрабатывать. Можно и не использовать $_GET['request'], тгда придется ручками разбирать $_SERVER['REQUEST_URI'], отсекать в нем все что после знака "?", потом прогонять через urldecode, если в запросе например была кириллица, а только потом бомбить на части (или обрабатывать регуляркой, способы бывают разные). А так часть работы за нас сделает сам php, остается взять готовенькое из $_GET.
skolozhabskiy
спасибо, все что вы пишете мне понятно, вы немного не понимаете о чем я пишу.
для меня остается непонятным, то как после клика по ссылке, получения $_GET['request'], его разбивки и извлечения элементов - что дальше делать с ними: передать в какую-то функцию для обработки и получения url или прямо в коде php index файла как-то обработать? я не нашел ни одного нормального примера, чтобы один раз увидеть как эта обработка $_GET['request'] выглядит реально.

а за терпение спасибо, но вы же знаете, что для меня лучше один раз увидеть, чем сотни раз теоретизировать проблему.

спасибо
killer8080
позже отпишусь
skolozhabskiy
спасибо
skolozhabskiy
вот набросал такой пример:

в php скрипте:

while ( $row = mysql_fetch_assoc($result_query) ){
$array = array($row['category_id'], constant($row['category_name']), $row['product_id'], $row['product_name']);
$urlPortion = 'request='.urlencode(serialize($array));
$output[] = '<a href="?'.$urlPortion.'">'.$row['product_name'].'</a>';
}


echo '<pre>'.print_r($output,1).'</pre>';

в индекс файле:

if ( isset($_GET['request']) )
{
$destArray = unserialize($_GET['request']);
echo '<pre>'.print_r($destArray,1).'</pre>';
}


в массиве $destArray получаю любые данные, но что делать дальше?

и еще проблему увидел в адресной строке если кликать по ссылкам все время добавляются новые данные к предшествующим в адресной строке. что с этим делать?

спасибо
Быстрый ответ:

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