niko28
Новичок
ЧПУ и регулярные выражения
1. Я сам не ас в PHP - а в регулярках тем более - так что не пинайте
2. Хочу написать ЧПУ для своего сайтика с использованием mod_rewrite
3. Точку входа хочу единственную - index.php - причем как для обычных так и для ajax-запросов
4. Количество модулей заранее не известно, поэтому прописывать все жестко не хотелось бы
А хотелось бы в идеале:
www.mysite.ru/p1/p2/ ... /pn => $p1=p1; $p2=p2; ... ; $pn=pn (это уже в PHP) - причем с ограничениями набора символов для p1, ..., pn
Вот можно было бы так:
RewriteRule ^(.*)$ index.php [L,QSA]
И дальше обработать функцией:
Но что-то это мне не очень нравится - уж больно уязвимо к атакам, ИМХО... если, например, чел тупо забъет адресную строку слешами!
Самому приходит в голову вот такое:
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)*$ index.php?p1=$1&p2=$2&p3=$3 [L]
НО
во-первых тут фиксированное число параметров, а во вторых корректно не обрабатывается последний слеш - т.е. нужно чтобы не имело значения - поставил его пользователь или нет
Вообщем думаю решения то уже давно есть, только я что-то найти не могу...
Может кто сталкивался?
Нет ли красивого решения при помощи чисто регулярок - без обработки потом на PHP ???
1. Я сам не ас в PHP - а в регулярках тем более - так что не пинайте
2. Хочу написать ЧПУ для своего сайтика с использованием mod_rewrite
3. Точку входа хочу единственную - index.php - причем как для обычных так и для ajax-запросов
4. Количество модулей заранее не известно, поэтому прописывать все жестко не хотелось бы
А хотелось бы в идеале:
www.mysite.ru/p1/p2/ ... /pn => $p1=p1; $p2=p2; ... ; $pn=pn (это уже в PHP) - причем с ограничениями набора символов для p1, ..., pn
Вот можно было бы так:
RewriteRule ^(.*)$ index.php [L,QSA]
И дальше обработать функцией:
PHP:
function Clear_array($array)
{
$c=sizeof($array);
$tmp_array=array();
for($i=0; $i<$c; $i++)
{
if (!(trim($array[$i])==))
{
$tmp_array[]=$array[$i];
}
}
return $tmp_array;
}
$param=$_SERVER[REQUEST_URI];
$params=explode(/,$param);
$params=Clear_array($params)
Но что-то это мне не очень нравится - уж больно уязвимо к атакам, ИМХО... если, например, чел тупо забъет адресную строку слешами!
Самому приходит в голову вот такое:
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)*$ index.php?p1=$1&p2=$2&p3=$3 [L]
НО
во-первых тут фиксированное число параметров, а во вторых корректно не обрабатывается последний слеш - т.е. нужно чтобы не имело значения - поставил его пользователь или нет
Вообщем думаю решения то уже давно есть, только я что-то найти не могу...
Может кто сталкивался?
Нет ли красивого решения при помощи чисто регулярок - без обработки потом на PHP ???
