[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как сделать с GET-параметров ЧПУ
quickxyan
есть такой адрес

http://news/news.php/news.php?news_id=12

хочу переделать в такой

http://news/news.php/news.php/news_id/12

что надо написать в .htaccess?
нашел пару статей, но они одинаковые и нифига неясные, помогите пожалусту



Спустя 5 минут, 29 секунд (2.05.2011 - 19:39) Игорь_Vasinsky написал(а):
регулярку.
вот на днях дали линк
http://www.generateit.net/mod-rewrite/

Спустя 14 минут, 25 секунд (2.05.2011 - 19:53) quickxyan написал(а):
спасибо, я так понял надо свою ссыль вставлять и по нажатию на кнопку дает мне ругулярочку для .htaccess

вот получился такой файл:


RewriteEngine on
RewriteRule ^([^/]*)\$ /news.php/news.php/news.php/news.php?news_id=$1 [L]


вот ссылка по которой делается регулярка:
http://news/news.php?news_id=4

при, переходе по ссылке адрес остается тем же. помет я что-то непонимаю?


Спустя 24 минуты, 25 секунд (2.05.2011 - 20:17) quickxyan написал(а):
вроде начал понимать, но все же что-то недовыходит (

Спустя 5 минут, 23 секунды (2.05.2011 - 20:23) quickxyan написал(а):
если самому сделать адрес ЧПУ-шним, то работает, но по идее должно же по регулярке переделывать GET в ЧПУ?

http://news/news.php?news_id=4
делаю так
http://news/news/4

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

Спустя 3 минуты, 29 секунд (2.05.2011 - 20:26) quickxyan написал(а):
вот внутреность файла .htaccess


RewriteEngine on
RewriteRule ^news/([0-9]+)/? news.php?news_id=$1 [QSA,L]

Спустя 5 минут, 11 секунд (2.05.2011 - 20:31) Игорь_Vasinsky написал(а):
написаь функцию которая так будет линки переделывать в соответствии вкл или выкл режим ЧПУ (создать в конфиге переменную $modRewrite, например)

function getLink($url)
{
global $modRewrite;

if($modRewrite == "on")
{
//модифицируешь принятый $url
}
else
{
// возращаешь принятый линк
$url = $url;
}

return $url
}


а в коде не сам лин ставишь а вызываешь функцию

<a href='<?php getLink("http://news/news.php?news_id=4"); ?>'>link</a>


На irbs-team - должно быть.

Такой же херью ща знимаюсь))))))))), но до функции (её использование) сам допёр ;)

Спустя 47 секунд (2.05.2011 - 20:32) Arni написал(а):
Вы куда-то не туда все копаете.

Цитата

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


Эти две строки должны дать свободу для передачи данных гет запросом.

Все, должно работать. Отпишитесь о результатах, если не поможет я еще раз гляну. Просто давно уже с этим всем игрался.

Спустя 2 минуты, 51 секунда (2.05.2011 - 20:35) quickxyan написал(а):
большое спасибо, сейчас попробуй, может получится что.

arni, попробовал, но так и не работает. вставлял эти 2 строки и перед своим и после и между 2 строками.

Спустя 3 минуты, 24 секунды (2.05.2011 - 20:39) Arni написал(а):
Даю всю свою магию. Тут все перенаправляется на index.php и уже скриптом парсим ЧПУ. Одно из этих правил значит еще надо вставить. Тоисть у меня это работает 100% и я отправляю спокойно вот такое.

http://srv3/index.html?var=2 и все отлично работает.

Цитата

DirectoryIndex index.php
RewriteEngine on
Options +FollowSymlinks
IndexIgnore */*
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php


Короче отпишись опять smile.gif.

Спустя 2 минуты, 28 секунд (2.05.2011 - 20:41) Игорь_Vasinsky написал(а):
Arni
т.е. вот эти 2 строки:

Цитата
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


и не надо регулярки писать в .htaccess? blink.gif

Спустя 10 минут, 43 секунды (2.05.2011 - 20:52) quickxyan написал(а):
Arni
что-то я вообще не понял(

скопировал твой код в .htaccess - в нем только этот код.
потом создал index.php так как у меня не было его.
пробовал сделать так http://news/index.php?news_id=10, но ничего не происходит.

Спустя 5 минут, 39 секунд (2.05.2011 - 20:57) Игорь_Vasinsky написал(а):
quickxyan
я не понял, что ты ждёшь.....

Тебе нужно чтоб ссылки на страницеавтоматом формировались в mod rewrite?

тогда юзай функцию.... или я тебя не понял - что ты хошь blink.gif

Спустя 2 минуты, 15 секунд (2.05.2011 - 21:00) Игорь_Vasinsky написал(а):
И потом, в html можно и такие линки (с GET) оставить - сервер их примет, но догда одно из достоинств ЧПУ теряешь - с точки зрени SEO.

Я лично у себя так делаю для поисковиков исключитеьно - а не для даунов - которые зачем то рассматривают адресную строку в браузере wink.gif

Спустя 45 секунд (2.05.2011 - 21:00) quickxyan написал(а):
та собирался попробовать твою функцию, но arni написал, что все намного проще, вот я и так и не попробовал) щас попробую и отпишусь

Спустя 1 минута, 16 секунд (2.05.2011 - 21:02) quickxyan написал(а):
Игорь_Vasinsky
та мне этот ЧПУ нафиг не упал, просто человеку писал скрипт, все ок, но он захотел плюс ЧПУ, вот и маюсь)

Спустя 5 минут, 20 секунд (2.05.2011 - 21:07) Arni написал(а):
Цитата (quickxyan @ 2.05.2011 - 17:52)
Arni
что-то я вообще не понял(

скопировал твой код в .htaccess - в нем только этот код.
потом создал index.php так как у меня не было его.
пробовал сделать так http://news/index.php?news_id=10, но ничего не происходит.

Вот тут то и ошибочка.

Эти правила я сочинил для того чтобы любой урл всеравно вызывал index.php. У тебя это не сработало потому что ты вызвал index.php, и поскольку такой есть, то потому он и был вызван. Попробуй вот так

Цитата
http://srv3/index.html


в index.php написать.


<?php
echo $_SERVER['REQUEST_URI'];
?>


И сервер будет выводить строку запроса. А также, если допустим в адресной строке будет что-то такое.

Цитата
http://srv3/index.html?var=2


И если в index.php дописать вот так.


<?php
echo $_SERVER['REQUEST_URI']; echo '<br />var = ' . $_GET['var'];
?>


то помимо строки запроса выведет еще и 2, тоисть значение отправленное через var.



Тоисть дословно, если в адресной строке нету обращения к существующему файлу на сервере, то перенаправить это в index.php.

Спустя 2 минуты, 37 секунд (2.05.2011 - 21:10) Игорь_Vasinsky написал(а):
ну посути тема давно рассжована, что у тебя не выходит то ?

в .htaccess - пишешь регулярки, кстати как я понял - несколько blink.gif

т.к. урл может быть таким:

Цитата
http://mysite.ru/index.php?mod=news


->

Цитата
http://mysite.ru/news


а тут:

Цитата
http://mysite.ru/index.php?mod=news&id=4

->
Цитата
http://mysite.ru/news/4


а если пагинатор:

Цитата
http://mysite.ru/index.php?mod=news&id=4&page=10

->
Цитата
http://mysite.ru/news/4/10



олучается 3 GET = 3 регулярки

Поправьт меня если я не прав sad.gif

Спустя 2 минуты, 31 секунда (2.05.2011 - 21:12) Arni написал(а):
Цитата (Игорь_Vasinsky @ 2.05.2011 - 17:41)
Arni
т.е. вот эти 2 строки:

Цитата
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


и не надо регулярки писать в .htaccess? blink.gif

Да, Но надо парсить ЧПУ уже в пхп.

Спустя 2 минуты, 55 секунд (2.05.2011 - 21:15) quickxyan написал(а):
ухххх, как же все сложно. думаю, что таки начну сам шаманить и склеивать оба метода.

понял одно, что надо написать пару строчек в .htaccess чтобы сам ЧПУ работал. а потом уже каждую ссылку переделать в ЧПУ

Спустя 2 минуты, 22 секунды (2.05.2011 - 21:17) quickxyan написал(а):
Игорь_Vasinsky
да все правильно, сам ЧПУ работает, мне надо сделать чтобы сам адрес переделывался в ЧПУ

Спустя 2 минуты, 8 секунд (2.05.2011 - 21:20) Игорь_Vasinsky написал(а):
quickxyan
ну вот - как я и говорил - всё делать должна функция, взависимости от того вкл или откл режим ЧПУ.

Всегда можно выкл (мало ли чё) - и линки останутся не ЧПУ wink.gif

Цитата
Да, Но надо парсить ЧПУ уже в пхп.


вот ты основательно меня запутал blink.gif

Покажи чтоль на примере, пока начал только делать, а оно вон как.. по другому blink.gif

Спустя 3 минуты, 47 секунд (2.05.2011 - 21:23) quickxyan написал(а):
Игорь_Vasinsky
твоя функция что-то не работает

Спустя 1 минута, 32 секунды (2.05.2011 - 21:25) quickxyan написал(а):
ну да, туплю там ведь обработчика нет))) щас буду ваять smile.gif

Спустя 3 минуты, 58 секунд (2.05.2011 - 21:29) Игорь_Vasinsky написал(а):
wink.gif я тока шаблон набрасал, самому страшно щас писать.... вчераж праздник был wink.gif

Спустя 3 минуты, 26 секунд (2.05.2011 - 21:32) Игорь_Vasinsky написал(а):
кстати в функции мжно испоьзовать parse_url() и тогда линк:

http://mysite.ru/index.php?mod=news&id=3&page=2

можно так разобрать:

$url = "http://mysite.ru/index.php?mod=news&id=3&page=2";
parse_url($url);
// и все GET в переменных
// $mod= "news";
// $id = 1;
// $page = 2;


$url = $mode."/".$id."/".$page;



вот так просто можно сформировать ЧПУшную ссылку

Спустя 23 секунды (2.05.2011 - 21:33) Arni написал(а):
Цитата (Игорь_Vasinsky @ 2.05.2011 - 18:20)
quickxyan
ну вот - как я и говорил - всё делать должна функция, взависимости от того вкл или откл режим ЧПУ.

Всегда можно выкл (мало ли чё) - и линки останутся не ЧПУ wink.gif

Цитата
Да, Но надо парсить ЧПУ уже в пхп.


вот ты основательно меня запутал blink.gif

Покажи чтоль на примере, пока начал только делать, а оно вон как.. по другому blink.gif

Смотри, правила я дал выше. Возьми чистую директорию хоста и попробуй с моими правилами поиграть. smile.gif.


Тоисть, если ты в адресную строку, запросиш не существующий файл на сервере, то если бы не эти правила, сервер выдал бы 404. Но поскольку они есть, то будет вызван index.php . И чтобы небыло в адресной строке написано, всегда будет вызван index.php. А уже в нем, можем разобрать строку запроса, она у нас как я уже говорил выше находится в

$_SERVER['REQUEST_URI'];

В скрипте уже парсим(разбираем), что эта строка могла бы означать.

Но, из зачего вся тема. Не надо разбирать то что идет после ?

Тоисть если пользователь запросит index.htm которого на сервере как вы уже поняли нет и никогда небыло, то Apache возьмет index.php , и передаст его интерпретатору, дождется когда тот вернет штмл, и отправит это пользователю. Потому что так написано в правилах.

В index.php мы можем получить строку index.htm, и уже там решить что бы это могло значить для сайта. А если прислали index.htm?var=4&var2=7 ... &var_n = 9 то это разберать не нужно. Все есть там где и должно быть. А именно в массиве $_GET.

Примером, может быть моя ЦМС, в которой все на этом принципе и построено.

Спустя 3 минуты, 42 секунды (2.05.2011 - 21:36) quickxyan написал(а):
Игорь_Vasinsky
ооо, уже переделыватся потихоньку вот только появился вопрос как получить урл формы.
ну типа у меня есть форма, как прикрутить туда твою функцию?

Спустя 2 минуты, 40 секунд (2.05.2011 - 21:39) Игорь_Vasinsky написал(а):
какой ещё урл формы blink.gif я тебя не понял...

пример blink.gif

Спустя 1 минута, 13 секунд (2.05.2011 - 21:40) Игорь_Vasinsky написал(а):
Arni
я ни чё не понял.... всё это с 404 - и так можно проделать... зачем тут mod rewrite.....

буду деать по своему....

Спустя 1 минута, 46 секунд (2.05.2011 - 21:42) Игорь_Vasinsky написал(а):
да, кстати - если использовать ЧПУ - то всё должно проходить через index.php (ну или какой там индексный файл), где то читал, мож на ирбисе blink.gif

Спустя 2 минуты, 6 секунд (2.05.2011 - 21:44) quickxyan написал(а):

<form action="index.php" METHOD="GET">
<input
type="text" name="text">
<input
type="submit">
</form>



Спустя 3 минуты, 33 секунды (2.05.2011 - 21:48) Arni написал(а):
Цитата (Игорь_Vasinsky @ 2.05.2011 - 18:40)
Arni
я ни чё не понял.... всё это с 404 - и так можно проделать... зачем тут mod rewrite.....

буду деать по своему....

Ну реально делайте как хотите, мне жалко что-ли. Просто дико как-то парсить то что и так можно получить. И раз вы уже таким делом занимаетесь, то ставьте лимит на цыкл. Ато придет добрый дядько и впарит вам строчку длинную, чтоб скрипту скучно небыло smile.gif. На всякий случай вот уже даже выяснил что именно за строка отвечает за то чтобы гет запрос приходил.


Цитата
RewriteRule . index.php



Спустя 3 минуты, 42 секунды (2.05.2011 - 21:51) Игорь_Vasinsky написал(а):
quickxyan
если форма на index.php и там же обработчик - то можно action - пустым оставить и не заморачиваться wink.gif

Arni
Цитата
лимит на цыкл

ты прекращай е поняными словами говорить sad.gif

как этот лимит то выставить

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

Спустя 9 минут, 55 секунд (2.05.2011 - 22:01) Arni написал(а):
Народ, ну вчитайтеся еще раз. Я в этот раз постараюсь быть максимально внятным.

Вот еще раз правила.

Цитата

RewriteEngine on
IndexIgnore */*
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php


#Options +FollowSymlinks я удалил в этот раз, вам это не надо.

А теперь по порядку.

1. Адресная строка предназначена для того чтобы ввести путь и имя файла который должен быть на сервере.
2. Апаче, как и любой уважающий себя веб сервер, попробует найти такой файл в директории хоста. И если такого нету, он вернет в шттп заголовках ошибку 404, тоисть нету такого.
3. Мы пишем правила, и делаем перехват этой ошибки. Тоисть вместо того чтобы выдать 404, Апаче (потому что мы так ему сказали в правилах), запустит на выполнение index.php.

Ну что тут может быть не понятно smile.gif ?

Спустя 5 минут, 24 секунды (2.05.2011 - 22:07) Игорь_Vasinsky написал(а):
Цитата
Ну что тут может быть не понятно  ?


про 404 усё понятно, но в своей CMS - я для каждой ошибки сделаю красивенькие странички, чтоб когда юзер промахнулся - он увидел что промахнулся, а не тупо перекинется на index.

Не понятно то что у тебя нет ни одной регулярки в .htaccess для работы с ЧПУ ohmy.gif

Спустя 4 минуты, 32 секунды (2.05.2011 - 22:11) Arni написал(а):
А вот нету, и если пользователь промахнулся то я ему выдам страничку 404 не хуже чем у вас smile.gif. Потому что из пхп можна и 404 вернуть, и страницу свою 404 выдать, и вобще сделать гараздо больше чем вы сможете своим способом. И если мне захочется чето передать в гет в модуль например, то мне не надо бежать опять и писать чето в регулярках. Я вобще туда не захожу уже давно, разве что включить выключить вывод ошибок пхп.

Ваш способ плох тем что интенсивно пишем регулярки постоянно, что ой как не забавно.

Вот даже сайт даю который делал гдето год назад, теже правила. И можна делать любую вложенность подкаталогов, без чегото там дописать в регулярку.

http://soundline.su/catalog/antiradari/beltronics tongue.gif

Спустя 21 минута, 34 секунды (2.05.2011 - 22:33) Игорь_Vasinsky написал(а):
Цитата
Вот даже сайт даю который делал гдето год назад, теже правила.


что то у тя странно на index перекидывает blink.gif

Вот смотри - дописал к твоему линку - AND(с прбелом впереди), хотел чёнить страшьненькое, но лень ph34r.gif

http://soundline.su/catalog/antiradari/beltronics AND

Спустя 2 минуты, 57 секунд (2.05.2011 - 22:36) Arni написал(а):
Все правильно, это пхп вернул 404. Так пожелал клиент, чтоб если нету такой страницы, то чтоб вернуло чистую 404. Но поверьте мне, index.php был вызван, и даже ваш айпи в логах записан.

Спустя 5 минут, 29 секунд (2.05.2011 - 22:41) Игорь_Vasinsky написал(а):
Цитата
ваш айпи в логах записан


ай йа ай ph34r.gif


Спустя 1 минута, 54 секунды (2.05.2011 - 22:43) quickxyan написал(а):
вобщем спасибо мужики я с горем пополам решил проблему.
написал в .htaccess обработку ЧПУ, а все ссылочки подкоректировал ручками(правда пока что не совсем то что хотел, но все же). теперь я сам формирую ссылки в ЧПУ подфортило, что там всего 2 вида ссылок и все работает.
правда все равно надо эту тему развивать так как далеко на таком временном решении не уедешь smile.gif

Спустя 5 минут, 35 секунд (2.05.2011 - 22:49) Игорь_Vasinsky написал(а):
quickxyan
ну вот - Арни же предлогаеьт решение - рассматривает любое кол-во GET (вложенности каталогов). правда я вообще не въехал...

либо вот эти 2 строчки заменяют все регулярки

Цитата
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


либо хз... заблудился

Спустя 3 минуты, 26 секунд (2.05.2011 - 22:52) quickxyan написал(а):
Игорь
так в том, то и дело, что я пока тоже не доганяю, а вот мож завтра утром, что и проклюнеться smile.gif

Спустя 10 минут, 38 секунд (2.05.2011 - 23:03) Arni написал(а):
Цитата (Игорь_Vasinsky @ 2.05.2011 - 19:49)
quickxyan
ну вот - Арни же предлогаеьт решение - рассматривает любое кол-во GET (вложенности каталогов). правда я вообще не въехал...

либо вот эти 2 строчки заменяют все регулярки

Цитата
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


либо хз... заблудился

Народ, еще раз пробую обьяснить что эти правила делают.

Дословно.

Если это не каталог и не файл, вызвать index.php . И уже в нем разобрать урл.

Есть два способа организации ЧПУ. Первое что я когда только начал с этим разгребать, сделал, это тоже что и вы. Писал регулярки для каждого вида ЧПУ.

Но перейти на новый способ меня заставили ряд обстоятельств.

1. Фиксированная вложенность. Тоисть строгое ограничение на каталоги и подкаталоги.
2. При добавлении нового модуля или чего-то там передумал, опять трахен-трахен с регулярками.

Новый способ это все решил, причем так, что ЧПУ для меня больше, в любых проявлениях не проблема. ЦМС разбирает урлу, и внутри скрипта я уже с этим всем воюю, и получается все просто чудесно.

Более того, я могу симулировать ссылку любого вида. Я даже могу симулировать будто сайт написан на asp. И вы в последствии никак не докажете что это не правда. smile.gif. Хотите код, пожалуйста, Alexa CMS я о ней писал на форуме. И уже скоро будет версия посильнее smile.gif.


Спустя 2 минуты, 35 секунд (2.05.2011 - 23:05) quickxyan написал(а):
Arni
как у тебя только терпения хватает обьяснять одно и то же)
я чес.слово завтра буду перечитывать тему и вдумыватся в твои посты, а вот после покатушек да бутылочки пива никак в голову не лезет)

Спустя 4 минуты, 29 секунд (2.05.2011 - 23:10) Arni написал(а):
Ну значит надо поспать. Завтра дорешаем smile.gif . А чтобы понять ,нужно поиграться и пощупать. Иначе и не получится.

Спустя 1 минута, 19 секунд (2.05.2011 - 23:11) Игорь_Vasinsky написал(а):
Arni
действительно, ты терпеливый.

Тож попробую разобраться, если не покатит - то в личку те стукну, уж извеняй.

И кстати наш метод тож может менять расширения у файлов

http://mysite.ru/news/21-01-11.mypage

Спустя 2 минуты, 3 секунды (2.05.2011 - 23:13) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 3.05.2011 - 00:11)
Тож попробую разобраться, если не покатит - то в личку те стукну, уж извеняй.

Не надо в личку. Создавай тему, пусть обсуждение будет открытым, чтобы и ошибки в случаи чего могли поправить, и ссылку дать, если кто-то еще спросит.
А то если все по личкам будут сидеть - никакого прогресса не будет.

Спустя 1 минута, 51 секунда (2.05.2011 - 23:15) Игорь_Vasinsky написал(а):
neadekvat
я имел ввиду приглашение в тему при нулевой актвности темы wink.gif

Спустя 24 минуты, 59 секунд (2.05.2011 - 23:40) Arni написал(а):
Цитата (Игорь_Vasinsky @ 2.05.2011 - 20:15)
neadekvat
я имел ввиду приглашение в тему при нулевой актвности темы wink.gif

У меня и асяька есть. Можеш и туда писать. Покажу раскажу. А вот про расширение файла вот что добавлю. Я это могу сделать в админке. И у меня в ЦМС есть три вида ссылок.

Цитата

http://www.my-site.com/mod/cataloge/page.rus
http://www.my-site.com/rus/mod/cataloge/page.html
http://www.my-site.ru/mod/cataloge/page.html


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

Расшифровка.

mod - Имя подключаемого модуля.
cataloge - Каталоги произвольной вложенности.
page - имя страницы.
rus - Языковый признак. (она у меня еще и многоязычная smile.gif )


html - расширение, можно заменить чем угодно. asp например, smile.gif.

Ссылка номер 3, как вы уже заметили без языкового признака. Все правильно ,потому что им является имя домена.

Все это работает, и что у меня в правилах я дал smile.gif.

Вот теперь и я иду спать smile.gif.


_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

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