Нужно что бы преобразовались ссылки:
index.php?op=news (/news)
index.php?op=search (/search)
index.php?op=news&id=23 (/news/23)
index.php?op=news&blocked&id=23 (/news/blocked/32)
index.php?op=news$edit=23 (/news/edit/23)
index.php?op=news&del=23 (/news/del/23)
Имеется функция которая проверяет ссылки:
// ЧПУ
function mod_rewrite($url){
global $mod_rewrite;
if ($mod_rewrite){
if (preg_match('#^[a-zA-Z\.]+\?[a-zA-Z]+\=[a-zA-Z]+$#i',$url)){
$url=substr($url,1);
$url=substr($url,strpos($url,'?')+1);
$variable_name = substr($url,0,strpos($url,'='));
$variable_val = substr($url,strpos($url,'=')+1);
return $variable_name.'/'.$variable_val;
} else {
return $url;
}
}
}
В функции имеется условие #^[a-zA-Z\.]+\?[a-zA-Z]+\=[a-zA-Z]+$#i. Оно работает для ссылок index.php?op=news
Но вот как сделать условие для index.php?op=news&id=23 или index.php?op=news&blocked&id=23 никак не допру.... Копался в редакторе RegExr, тоже ничего не понял.
Помогите пожалуйста.
Спустя 6 минут, 21 секунда (7.05.2011 - 22:13) alex12060 написал(а):
Это делается в .htaccess
Как-то так.
RewriteRule ^([a-z]_\.)/([0-9])+$ index.php?op=$1&id=$2
Как-то так.
Спустя 3 минуты, 2 секунды (7.05.2011 - 22:16) santaros написал(а):
alex12060
Упс, только что заметил что вы написали про htaccess.
Но ведь прежде чем в htaccess. что то делать, нужно что бы функция возвращала ссылку...преобразованную.
Упс, только что заметил что вы написали про htaccess.
Но ведь прежде чем в htaccess. что то делать, нужно что бы функция возвращала ссылку...преобразованную.
Спустя 3 минуты, 28 секунд (7.05.2011 - 22:19) alex12060 написал(а):
Нет. Я тут вообще не советую делать функцию.
Почитай про htaccess
Но если по велосипеду, то делать так:
Получаешь УРЛ в строку, разбераешь ее с помощью parse_url(), считаешь полученные данные и уже подставляешь в нормальные ссылки.
Почитай про htaccess
Но если по велосипеду, то делать так:
Получаешь УРЛ в строку, разбераешь ее с помощью parse_url(), считаешь полученные данные и уже подставляешь в нормальные ссылки.
Спустя 3 минуты, 14 секунд (7.05.2011 - 22:23) santaros написал(а):
alex12060
Дык у меня так и делается...
Просто у меня всё идёт через index.php поэтому я подумал что лучше будет сделать функцию.... тем более я смогу её выключать если нужно.
Функция проверяет ссылки и преобразует их если нужно.
А в htaccess у меня есть условие которое позволяет ссылке работать:
Мне нужно правильно сформировать условия в функции, что бы функция выдавала мне назад преобразованную ссылку, а не обычную.
Сейчас она работает с ссылками index.php?op=news
А вот с ссылками index.php?op=news&id=21 не работает. Возвращает старую ссылку index.php?op=news&id=21
Дык у меня так и делается...
Просто у меня всё идёт через index.php поэтому я подумал что лучше будет сделать функцию.... тем более я смогу её выключать если нужно.
Функция проверяет ссылки и преобразует их если нужно.
А в htaccess у меня есть условие которое позволяет ссылке работать:
RewriteEngine On
RewriteCond %{REQUEST_URI} !(admin)
RewriteRule ^([a-zA-Z0-9]+)$ index.php?op=$1 [QSA,L]
Мне нужно правильно сформировать условия в функции, что бы функция выдавала мне назад преобразованную ссылку, а не обычную.
Сейчас она работает с ссылками index.php?op=news
А вот с ссылками index.php?op=news&id=21 не работает. Возвращает старую ссылку index.php?op=news&id=21
Спустя 2 минуты, 37 секунд (7.05.2011 - 22:25) Winston написал(а):
Цитата (santaros @ 7.05.2011 - 21:07) |
Нужно что бы преобразовались ссылки: index.php?op=news (/news) index.php?op=search (/search) index.php?op=news&id=23 (/news/23) index.php?op=news&blocked&id=23 (/news/blocked/32) index.php?op=news$edit=23 (/news/edit/23) index.php?op=news&del=23 (/news/del/23) |
Примерно так
RewriteEngine On
RewriteBase /
// Для (/news) и (/search)
RewriteRule ^([a-z0-9_-]+)/?$ index.php?op=$1
// Для (/news/23)
RewriteRule ^([a-z0-9_-]+)/([0-9]+)/?$ index.php?op=$1&id=$2
// Для (/news/blocked/32)
RewriteRule ^([a-z0-9_-]+)/([a-z0-9_-]+)/([0-9]+)/?$ index.php?op=$1&blocked=$2&id=$3
// Для (/news/edit/23)
RewriteRule ^([a-z0-9_-]+)/([0-9]+)/?$ index.php?op=$1&edit=$2
// Для (/news/del/23)
RewriteRule ^([a-z0-9_-]+)/([0-9]+)/?$ index.php?op=$1&del=$2
А для ссылок так можно
Для index.php?op=news&id=23
#^index.php\?[a-z]{2}=[a-z]+&[a-z]{2}=\d+$#i
index.php?op=news&blocked&id=23 -> у параметра blocked должно быть какое то значение
Для index.php?op=news&blocked=true&id=23
#^index.php\?[a-z]+=[a-z]+&[a-z]+=[a-z]+&[a-z]{2}=\d+$#i
Спустя 1 минута, 20 секунд (7.05.2011 - 22:27) sharki написал(а):
PHPprogramer
И ты будешь прописывать условие в htaccess как только появится новый модуль. или еще одна подподкатегория?)
И ты будешь прописывать условие в htaccess как только появится новый модуль. или еще одна подподкатегория?)
Спустя 35 секунд (7.05.2011 - 22:27) Winston написал(а):
Вот отличная функция которая формирует ссылки
Спустя 2 минуты, 32 секунды (7.05.2011 - 22:30) Winston написал(а):
Цитата (sharki @ 7.05.2011 - 21:27) |
И ты будешь прописывать условие в htaccess как только появится новый модуль. или еще одна подподкатегория?) |
Одну строчку не сложно дописать.
Просвети как по другому сделать ?
Спустя 3 минуты, 6 секунд (7.05.2011 - 22:33) sharki написал(а):
PHPprogramer
И там уже парсить всю строку как тебе угодно =)
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
И там уже парсить всю строку как тебе угодно =)
Спустя 10 минут, 39 секунд (7.05.2011 - 22:43) santaros написал(а):
PHPprogramer
А нет ли функции по проще. Та функция работает с Get и не слишком понятно как она преобразует.
А нет ли функции по проще. Та функция работает с Get и не слишком понятно как она преобразует.
Спустя 6 минут, 45 секунд (7.05.2011 - 22:50) Winston написал(а):
Цитата (santaros @ 7.05.2011 - 21:43) |
А нет ли функции по проще. |
Цитата (santaros @ 7.05.2011 - 21:43) |
Та функция работает с Get |
Нет она с get не работает, ссылки там формируются так:
<a href="<?php echo href('page=main', 'rem=read'); ?>">
И в зависимости если mod_rewrite выключен получаем
page=main&rem=read
если включен
main/read
Спустя 31 минута, 19 секунд (7.05.2011 - 23:22) santaros написал(а):
PHPprogramer
Странно, но у меня ваша функция почему то выводит пустое значение....
Хотя вроде всё правильно делаю.
Странно, но у меня ваша функция почему то выводит пустое значение....
Хотя вроде всё правильно делаю.
Спустя 1 минута, 56 секунд (7.05.2011 - 23:23) neadekvat написал(а):
santaros, что ты ожидал, отправив свой пост? Что тебе что-то подскажут? Тогда где код, включая саму функцию и ее использование?
Спустя 27 секунд (7.05.2011 - 23:24) alex12060 написал(а):
santaros
Тебе надо преобразовать такое: http://www.test.ru/page/lala/id/12
в это: http://www.test.ru/?page=lala&id=12
Я прав? Или наоборот?
Тебе надо преобразовать такое: http://www.test.ru/page/lala/id/12
в это: http://www.test.ru/?page=lala&id=12
Я прав? Или наоборот?
Спустя 9 минут, 21 секунда (7.05.2011 - 23:33) santaros написал(а):
neadekvat
Функция:
Применение:
<a href="'.mod_rewrite("index.php?op=news"). '">Новости</a>
Возвращает ссылку вида /news вместо index.php?op=news
Нужно добавить условия в функцию(выше) что бы преобразовывались ссылки вида index.php?op=news&id=21 в ссылки /news/21
alex12060
Наоборот.
http://www.test.ru/?page=lala&id=12
в
http://www.test.ru/lala/12
Функция:
function mod_rewrite($url){
global $mod_rewrite;
if ($mod_rewrite){
if (preg_match('#^[a-zA-Z\.]+\?[a-zA-Z]+\=[a-zA-Z]+$#i',$url)){
$url=substr($url,1);
$url=substr($url,strpos($url,'?')+1);
$variable_val = substr($url,strpos($url,'=')+1);
return $variable_val;
} else {
return $url;
}
}
}
Применение:
<a href="'.mod_rewrite("index.php?op=news"). '">Новости</a>
Возвращает ссылку вида /news вместо index.php?op=news
Нужно добавить условия в функцию(выше) что бы преобразовывались ссылки вида index.php?op=news&id=21 в ссылки /news/21
alex12060
Наоборот.
http://www.test.ru/?page=lala&id=12
в
http://www.test.ru/lala/12
Спустя 2 минуты, 58 секунд (7.05.2011 - 23:36) neadekvat написал(а):
Цитата (santaros @ 8.05.2011 - 00:33) |
Возвращает ссылку вида /news вместо index.php?op=news |
Так поставь $mod_rewrite в false.
Спустя 3 минуты, 32 секунды (7.05.2011 - 23:40) santaros написал(а):
neadekvat
Это я как удачный пример привёл.
мне нужно что бы он так же возвращал ссылку /news/21 вместо index.php?op=news&id=21
Для этого необходимо условие в функции.
Это я как удачный пример привёл.
мне нужно что бы он так же возвращал ссылку /news/21 вместо index.php?op=news&id=21
Для этого необходимо условие в функции.
Спустя 3 минуты, 47 секунд (7.05.2011 - 23:44) neadekvat написал(а):
Цитата (santaros @ 8.05.2011 - 00:33) |
Возвращает ссылку вида /news вместо index.php?op=news |
Как я должен был понять эти слова?..
Ладно.
$mod_rewrite вообще определена?
Спустя 8 минут, 36 секунд (7.05.2011 - 23:52) santaros написал(а):
neadekvat
Вы не поняли. Функция прекрастно работает. $mod_rewrite определена.
Но возвращаются преобразованными только ссылки вида index.php?op=news.
А вот ссылки другого вида index.php?op=news&id=23 возвращаются не преобразованными, тоесть так и остаются index.php?op=news&id=23.
Мне нужна помощь в доработке функции mod_rewrite, что бы она преобразовывала ссылки index.php?op=news&id=23 в ссылки /news/23
Вы не поняли. Функция прекрастно работает. $mod_rewrite определена.
Но возвращаются преобразованными только ссылки вида index.php?op=news.
А вот ссылки другого вида index.php?op=news&id=23 возвращаются не преобразованными, тоесть так и остаются index.php?op=news&id=23.
Мне нужна помощь в доработке функции mod_rewrite, что бы она преобразовывала ссылки index.php?op=news&id=23 в ссылки /news/23
Спустя 4 минуты, 30 секунд (7.05.2011 - 23:57) neadekvat написал(а):
function href()
{
$args = func_get_args();
$href = '';
if ($args[0] == 'host')
return HOST;
foreach($args as $var)
{
$param = explode('=', $var);
$href .= '/'. $param[1];
}
return HOST . ltrim($href, '/');
}
Сюда только добавить усолвие mod_rewrite и определить HOST.
Спустя 5 минут, 34 секунды (8.05.2011 - 00:02) Winston написал(а):
Цитата (santaros @ 7.05.2011 - 22:52) |
Мне нужна помощь в доработке функции mod_rewrite, что бы она преобразовывала ссылки index.php?op=news&id=23 в ссылки /news/23 |
Я же внизу этого поста написал 2 шаблона регекспа для преобразования ссылок.