ЧПУ и регулярные выражения

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]

И дальше обработать функцией:

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 ???
 

DiMA

php.spb.ru
Команда форума
Изучи реги. Выступать с заявоениями "я чайник не знаю регов помогите" - глупо :)

По урлам варианты:
1. RewriteRule ^(.*)$ index.php, остальное регами на пхп пробиваешь. Все абсолютно безопасно, если делать с умом.

2. Рерайтом описываешь все возможные УРЛы, где и происходит авто разбитие по параметрам. Это более продуктивный и безопасный вариант. Минус - что на новые модули нужно лезсть в .htaccess. Но это маленький минус, посравнению с остальными плюсами. Боязнь "каждые 5 минут будут править рерайт" - глупость. Не будешь.
 

tf

крылья рулят
Но что-то это мне не очень нравится - уж больно уязвимо к атакам, ИМХО... если, например, чел тупо забъет адресную строку слешами!
изучи реги, и парси url одной регай
 

niko28

Новичок
*****, можно сделать так, что цикл for положит нахрен весь сервак! А доп. проверки вставлять еще - опять же не красиво все это.

Понятно, что "изучи реги" - изучаю... но чтобы всю их красоту и изюминки заюзать это сколько времени надо! А в лоб идти уж как-то топорно! Вот и жду - может кто красивое решение предложит - причем я более чем уверен что оно уже кем-то придумано и давно юзается - проблема-то не нова - только вот найти не могу
 

tf

крылья рулят
мде, ага какже, твое решени не доживет до спамера
Вот и жду - может кто красивое решение предложит
вот начни с того чтобы сделать регу, сначалу для одного слэша потом для двоих
 

weregod

unserializer
niko28, экспериментируйте на локальной рабочей станции, необязательно "класть нахрен весь сервак" циклами
 

niko28

Новичок
Автор оригинала: weregod
niko28, экспериментируйте на локальной рабочей станции, необязательно "класть нахрен весь сервак" циклами
ну это само собой

Автор оригинала: *****
продемонстрируй это утверждение примером, пожалуйста
Примером удалось увеличить время выполнения php-скрипта на 0.05 секунды, после чего сервер сказал: "Request-URI Too Large

The requested URL's length exceeds the capacity limit for this server." - ну уже хорошо, что у него есть защита от этого...

Эх, в любом случае не красиво это циклами делать - буду думать на регами...
 

tf

крылья рулят
мде, ему предложили хорошее решение а он мимо прошел
 

niko28

Новичок
tf, что ты имеешь в виду? Предложли реги изучать - изучаю... :)
 

XStudent

Новичок
Завалить сервак циклом фор нереально, т.к. есть ограничение на длину get-запроса.
 
Сверху