FAKE ЧПУ, прошу "обкакать" мою реаллизацию

kruglov

Новичок
это специально, чтобы при использовании модреврайта не реврайтилась статика
Ммм, а мне раньше казалось, что для того, чтобы статику не реврайтить, надо ее в rewrite-правилах на существование проверять.
 

Духовность™

Продвинутый новичок
Nelius
не обижайся, но по-моему ты такую х@ню написал, что 3.14здец просто

Директория news и файл Dmitry_Kvadratikov_smenil_familiyu_na_Pikselov.html физически существуют на сервере.
Файл Dmitry_Kvadratikov_smenil_familiyu_na_Pikselov.html содержит:
<?php
$mod_id='news';
$item_id='Dmitry_Kvadratikov_smenil_familiyu_na_Pikselov';
require('../index.php');
?>
т.е. если у меня 600 000 новостей, у меня кроме базы ещё и будет 600 000 файлов? Не поверишь, с реврайтом это делается в одну строчку правила и пару строк в файлике news.php
 

Nelius

кипарис во дворе
Я решил отказаться от ЧПУ по нескольким причинам:

1. Полноценно реализовать их, вообще не используя мод_реврайт, нельзя (только моим кустарным способом, с кучей недостатков)
2. Если мод_реврайт может сделать все это сам, то зачем дополнительно нагружать ПХП
3. Меньше путаницы, я использую ссылки вида www.site.ru/index.php?mod=news&id=1263 знаю что у меня будут 2 переменные GET mod и id с ними и работаю, даже если превращу урл реврайтом в www.site.ru/news/1263 , то на входе скрипта все равно имею переменные GET mod и id.

-~{}~ 24.11.07 12:00:

Автор оригинала: triumvirat
Nelius
не обижайся, но по-моему ты такую х@ню написал, что 3.14здец просто
т.е. если у меня 600 000 новостей, у меня кроме базы ещё и будет 600 000 файлов? Не поверишь, с реврайтом это делается в одну строчку правила и пару строк в файлике news.php
Не обижаюсь, я сам оценил недостатки моего подхода и выше уже писал что подходит только для маленьких сайтов-визиток.
Ну а по поводу одной строки это вы загнули)
Одной строчки может быть достаточно только для раздела news а у других разделов может быть своя специфика.
 

Духовность™

Продвинутый новичок
1. Полноценно реализовать их, вообще не используя мод_реврайт, нельзя (только моим кустарным способом
1. Кто сказал? ЧТО СЛОЖНОГО парсить строку /news/privet.html, взять news, определить, что эту новость должен обрабатывать модуль новостей и сделать SELECT ... from ... WHERE news.url = 'privet'??

2. Можно не парсить - можно создать каталог news и положить туда index.php и хтацесс с ОДНОЙ директивой!

Одной строчки может быть достаточно только для раздела news а у других разделов может быть своя специфика.
см. пункт 2 или:

если у разделов своя специфика, то
надо делать как я описал в п.1 - ЛЮБОЙ REQUEST мы отдаем в index.php

Там мы делаем explode GET-запроса. Берем нулевой элемент получившегося массива - смотрим, какой модуль обрабатывает этот URL. Потом подключаем модуль, где прописаны правила обработки URL для данного раздела.

-~{}~ 24.11.07 12:13:

Поисковикам начхать на ЧПУ.
Полностью. Но http://xpoint.ru/forums/internet/html_css/markup/forum.xhtml красивее чем http://xpoint.ru/?module=forums&id=markup
 

Фанат

oncle terrible
Команда форума
Можно и не повторять, можно цифровой id было использовать)
меня огорчает тот факт, что ты не думаешь над вопросами.
Не буду ничего больше писать

-~{}~ 24.11.07 12:40:

triumvirat
на эту красоту обращает внимание 5% посетителей.
50% же вообще не знает, что такое адресная строка
 

Nelius

кипарис во дворе
Ф*а*н*а*т
меня огорчает тот факт, что ты не думаешь над вопросами.
Не буду ничего больше писать
Мне показалось что вы имеете ввиду
$item_id='Dmitry_Kvadratikov_smenil_familiyu_na_Pikselov';
в точности повторяет название html файла, так что впринципе его можно и не указывать вовсе, просто из имени файла убрать .html и использовать как id.

Про цифровой id написал по друой причине, как бы в развитие моей первой мысли. Вообще делал эти все ЧПУ только из-за того, что мне знакомый оптимизатор сказал что наличие ключевых слов в URL учитывается поисковыми системами, вот я и написал про id для того чтобы сделать обычный цифровой id новости и не привязывать его к названию файла, а в название файла тогда можно было бы напихать все что душе угодно.

Но если тут мне уже 2 человека говорят, что поисковикам начхать на это самое наличие ключевых слов в url то я задумаюсь над этим.

triumvirat
Был неправ, признаю.
А про одну строчку, вы имели ввиду
Перенаправлять все запросы типа
/news/privet.html
/news/poka.html
На /news/index.php ?
Или я снова недопонял?
 

Духовность™

Продвинутый новичок
Перенаправлять все запросы типа
/news/privet.html
/news/poka.html
На /news/index.php ?
да. получать всю строку запроса и парсить. типа

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

RewriteRule (.*) index.php?path=/$1&%{QUERY_STRING}
 

Nelius

кипарис во дворе
да. получать всю строку запроса и парсить. типа
Спасибо, это заставляет задуматься. Реализация ЧПУ с таким подходом получатеся некой золотой серединой, так как не приходится писать кучу разных правил для mod_rewrite и при этом не особо нагружается ПХП, так как для мох задач достаточно explode и str_replace ну или на крайняк одной регулярки...
Минус подхода один, если мод реврайт не работает на хостинге, то CMS работать не будет.
Так что я попробую совместить, изначально все будет построенно на обычных GET и POST переменных а если включить опцию в конфиге, то ссылки будут формироваться и парситься в соответствии с данным подходом.

Хотелось бы поблагодарить всех кто "бил меня палкой по голове" в этом топике, это мне прибавило понимания. Спасибо!
 

dark-demon

d(^-^)b
> Ммм, а мне раньше казалось, что для того, чтобы статику не реврайтить, надо ее в rewrite-правилах на существование проверять.

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

-~{}~ 24.11.07 17:17:

> Но http://xpoint.ru/forums/internet/ht...kup/forum.xhtml красивее чем http://xpoint.ru/?module=forums&id=markup

особенно вставляет это прелестное многоточие... :)
 

kruglov

Новичок
dark-demon
Не понял, что за правила и бесконечные исключения, но предположим, что у вас RewriteCond %{REQUEST_FILENAME} !-f в связи с причинами личного свойства вызывают отвращение.

Но напрягать пользователя, чтоб он не забывал слеши дописывать, это гораздо лучше, что ли?

Встречал я какую-то горе-админку, в которой надо было писать не /admin, а обязательно /admin/, не ваша, случайно?
 

Nelius

кипарис во дворе
dark-demon
kruglov безусловно прав, ваш подход всем хорош и я бы с удовольствием его использовал, но слеши в конце, без которых не работает, сводят все прелести на нет. Я программист, и легко разберусь почему ссылка без слеша в конце не сработала, а простой человек, который не имеет достаточного опыта работы в сети интернет может даже и не догадаться что этот слеш в конце имеет значение.

Я тут более детально поизучал вопрос, поискал по форуму и наткнулся на ссылку, которую постил AP, весьма занимательное чтиво, еще и на русском языке, красота!

LINK: FrontController
 

dark-demon

d(^-^)b
> Но напрягать пользователя, чтоб он не забывал слеши дописывать, это гораздо лучше, что ли?

да, ури - это уникальный идэнтификатор ресурса. не надо замусоривать ни кэш браузера, ни кэш прокси, ни индексы поисковиков разнообразными идентификаторами для одной и той же страницы.


> Встречал я какую-то горе-админку, в которой надо было писать не /admin, а обязательно /admin/, не ваша, случайно?

в моей админке не надо ничего вводить в адресную строку, ибо на странице всегда доступны контекстные ссылки на нужные разделы. вообще, я крайне негативно отношусь ко всяким бэкоффисам. админ - это тот же пользователь сайта, просто прав у него больше.
 

kruglov

Новичок
dark-demon
ури - это уникальный идэнтификатор ресурса
Что-то вы не то говорите. Вообще-то для этого давным-давно применяют redirect. И кэши браузера, прокси, поисковиков и все те, за кого вы еще радеете в ущерб главному потребителю сайтов - человеку, при этом не замусориваются.

в моей админке не надо ничего вводить в адресную строку, ибо на странице всегда доступны контекстные ссылки
Ай, маладца. А производство сайтов это как, не сильно удорожает?

И формочка для входа все время есть на виду, что ли?

...крайне негативно...
Что-то вы больно много эмоций разных нехороших проявляете в работе, то ненавидите, к этому крайне негативно относитесь, за что-нибудь вообще зарезать готовы будете, что ли?
 

dark-demon

d(^-^)b
> Вообще-то для этого давным-давно применяют redirect.

и получают два запроса к серверу вместо одного.


> в ущерб главному потребителю сайтов - человеку

о да, такой ущерб, что я сейчас расплачусь...


> Ай, маладца. А производство сайтов это как, не сильно удорожает?

нет


> И формочка для входа все время есть на виду, что ли?

да
 

HraKK

Мудак
Команда форума
dark-demon
Зря. Вы нагружаете FrontСontroller тем что ему не надо знать.
И вообще не правильно мыслите.
 

Nelius

кипарис во дворе
Вот еще хотел спросить... допустим у меня некоторые параметры используются несколько раз... перед использованием они проходят через цепочку фильтров...
я вот подумываю о том чтобы хранить уже "готовое" значение где-нить... но ведь в самом контроллере нельзя... получяется что смешиваю контроллер и модель?
Или вообще сама идея в корне не верна?

-~{}~ 24.11.07 23:12:

Хотя я тут вот что подумал, в качестве модели можно использовать уже существующие массивы _GET и _POST
Это конечно не будет моделью как таковой, скорее некое хранилище)
 
Сверху