[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Реврайты... много реврайтов!
AlmazDelDiablo
Привет всем!

Сегодня у меня вопрос несколько философский, о теории и проектировании.
Имеется такая структура URL'a: domain.com/action/event/[arguments/] . Ничего в ней нового нет, но суть в чем. Корректно ли создавать множество правил реврайта, чтобы скрыть action или event? Например, регистрация (event «registration») относится к экшену profile. Но мне хочется, чтобы адрес страницы с регистрацией был просто domain.com/registration , я делаю правило реврайта, перенаправляя запрос такого типа на domain.com/profile/registration .

И подобных ситуаций у меня довольно много (в результате файл с регулярками для реврайтов может вырасти в 100+ строк). Вопрос. Корректен ли подобный подход? Да и получается множество «мусорных» страниц с разными URL-ами и одинаковым содержимым, с котороыми тоже как-то нужно бороться (тут встает вопрос — как именно?)



Спустя 2 часа, 30 минут, 22 секунды (7.09.2012 - 01:09) FatCat написал(а):
Цитата (AlmazDelDiablo @ 6.09.2012 - 23:39)
в результате файл с регулярками для реврайтов может вырасти в 100+ строк

Мне лень мучать эйчтиакцесс, мне привычней всё возможное делать средствами php.

Я бы положил в директорию domain.com/action/ файл index.php , а в нем бы уже разбирал $_SERVER['REQUEST_URI'].

Спустя 11 минут, 50 секунд (7.09.2012 - 01:21) FatCat написал(а):
На этом принципе у нас сейчас работает мод статейного размещения.
Физически работает лишь один файл phpforum.ru/faq/index.php
Вот код разбора строки запроса:
$main_string = substr($_SERVER['REQUEST_URI'],5,-5);
if(substr($main_string,0,5) == "index")$page_num = intval(substr($main_string,5));
elseif($_SERVER['REQUEST_URI'] == "/faq/")$page_num = 0;
else $page_num = -1;
$main_string = explode("/",$main_string);
$t = 0;
if(count($main_string) == 2) // Статья
{
$t = intval($main_string[0]);
$d = $std->clean_value($main_string[1]);
}
else // Страница каталога
{
$t = 0;
$d = "";
}

$t - айдишник статьи в базе.
$d - транслит заголовка; служит для уникальности: если не совпадет с заголовком в базе, страницу не покажет, сбросит в каталог.

Спустя 24 минуты, 55 секунд (7.09.2012 - 01:46) inpost написал(а):
AlmazDelDiablo
Не вижу необходимости. Хотя с другой стороны, почему первым идёт ДЕЙСТВИЕ? Возьми пример с того же ирбиса: модуль, страница, внутренние настройки.
Получается, что если модуль регистрации, где дефолтная страница регистрации, мы получим адрес /registration и всё. Или свой более сложный свитч, в котором задашь четкие правила, если первы аргумент == registration, значит подключаем модуль регистрации, в противном случае иные действия.
В таком случае будут ссылки вроде:
/userid100
/userid101
/userid102...
/registration
/faq
/news/17/comments
и т.д. Благодаря свитчу верному. Если параметры не передаёшь, задавай дефолтные параметры.

if(!isset($_GET['rem']))
$_GET['rem'] = 'read';

include '/modules/'.$_GET['page'].'/'.$_GET['rem'].'.php';


Подумай над таким миксом.

Спустя 9 часов, 40 минут, 8 секунд (7.09.2012 - 11:26) AlmazDelDiablo написал(а):
inpost, на счет модулей/экшенов и т.д. — это дело терминологии, не суть важно. Я твою мысль понял и посчитал её верной. Виной всем моим многочисленным реврайтам — моя «скупость» и желание запихать как можно больше эвентов в один экшен ) Для начала разделил profile на registration, login, logout и users, всё стало гораздо красивее и меньше реврайтов. Спасибо за подталкивание к правильной мысли!

user posted image


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

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