MultiViews и ErrorDocument

andronof

Новичок
MultiViews и ErrorDocument

Задача: сделать понятные url. Везде написано что есть модуль mod_rewrite, но не факт что он стаит у хостера.
Тогда я понимаю остаётся два варианта:
- делать через опцию MultiViews. Но есть небольшие неудобства например
http://www.mysite.ru/menu_1/bla-bla-bla/
в этом случаи он(apache) будет искать файл menu_1.php и передавать строку запроса /menu_1/bla-bla-bla/.
Но если ввести просто http://www.mysite.ru/ то он искать будет только index.php. Но будет же не только menu_1(но и menu_2 и т.д.) можно же конечно сделать кучу файлов с именами menu_1.php,menu_2.php и т.д. и из них вызывать какую-нибудь общую функцию.А создавать под каждое меню отдельный файл не хочиться.
И еще по-моему этот вариант нагружает сервер.
- и второе это через ошибки ErrorDocument. Здесь как я понимаю все проще говоришь серверу перенаправлять все запросы с ошибками в какой-нибудь файл и там разбираешь все пути.Но этот вариант излишне нагружает сервер, что очень не хочется.

Вопрос:
Какой из этих вариантов меньше всего нагружает сервер?
Если еще какие-нибудь варианты?
И можно ли сделать так чтобы в первом варианте не создавать под каждое меню отдельный файл?
 

SiMM

Новичок
> Но будет же не только menu_1(но и menu_2 и т.д.) можно же конечно сделать кучу файлов с именами menu_1.php,menu_2.php и т.д. и из них вызывать какую-нибудь общую функцию.А создавать под каждое меню отдельный файл не хочиться.
И что мешает юзать ссылки вида http://www.mysite.ru/menu/1/bla-bla-bla ?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
andronof
Если еще какие-нибудь варианты?
Есть ещё 3-й - проверить есть ли реврайт у Хостера.

-~{}~ 08.07.07 19:22:

ПРоверить довольно просто

.htaccess
RewriteEngine on
RewriteRule ^test/?$ / [R]

Если при запросе http://yousite/test/ перенаправит на корень сайта значит реврайт есть
 

andronof

Новичок
Автор оригинала: SiMM
> И что мешает юзать ссылки вида http://www.mysite.ru/menu/1/bla-bla-bla ?
Ты имеешь ввиду что надо создать каталоги в них положить файлы.
Так не пойдет.Например если вместо bla-bla-bla будет номер новости.Это получиться надо будет каждый раз создавать файл с номером новости.А когда например их будет очень много или они будут появляться часто это будет мягко говоря не удобно.

-~{}~ 08.07.07 20:34:

Автор оригинала: Mr_Max


ПРоверить довольно просто

.htaccess
RewriteEngine on
RewriteRule ^test/?$ / [R]

Если при запросе http://yousite/test/ перенаправит на корень сайта значит реврайт есть
Спасибо. Это можно узнать и на сайте хостера.Но хотелось что бы выбор хостера не зависел от того стоит у него это модуль или нет.
 

AmdY

Пью пиво
Команда форума
вариант 1 - прописывай везде index.php
вариант правильный - меняй хостинг, если уж хостер не удосужился установить mod_rewrite, то такому хостеру доверять нельзя.
 

andronof

Новичок
Автор оригинала: AmdY
вариант 1 - прописывай везде index.php
Мне кажется что если например url имеет вид http://www.mysite.ru/news/n/ , где n номер новости.
То можно например что бы скрипт который добавляет новость в Базу Данных еще и создавал папку, а в нее ложил файл index.php с каким нибудь шаблонным содержанием.В принципе так можно сделать и для всего сайта.Но мне кажется что это как-то не правильно.И это будет похоже на автоматизированный вариант который предложил SIMM.
 

NightFlash

Новичок
andronof
а еще можно писать html файлы для каждой странички.

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

SiMM

Новичок
> Ты имеешь ввиду что надо создать каталоги в них положить файлы.
Вы хотите сказать, что в Вашем случае http://www.mysite.ru/menu_1/bla-bla-bla/
есть папка bla-bla-bla?
 

andronof

Новичок
Автор оригинала: NightFlash
mod_rewrite самый адекватный ответ решения этой проблемы, все уже сказано.
Я сам все больше и больше к это варианту склоняюсь.

-~{}~ 09.07.07 08:48:

Автор оригинала: Mr_Max
Посетите, пожалуйста PHP Club Cookbook & FAQ
http://phpclub.ru/faq/chpu#options
Спасибо.Посетил.Честно говоря я пробывал делать только через MultiViews. И что через метод ErrorDocument не передаются POST данные я не знал. Значит этому методу еще один минус в копилку.

-~{}~ 09.07.07 09:03:

Автор оригинала: SiMM
Вы хотите сказать, что в Вашем случае http://www.mysite.ru/menu_1/bla-bla-bla/
есть папка bla-bla-bla?
Я не очень понял что вы хотите этим спросить.Нет конечно папки bla-bla-bla нету и папки menu_1.
Все папки и файлы должны быть по идее только в строке url и в памяти пользователя.
Хотелось конечно что бы в идеале любой запрос передавался в один файл там я его разбирал бы
на фрагменты и в зависимости от них делал то или другое, ну если делать нечего то выводил бы ошибку.

Как я понял этим условием удовлетворяет только модуль mod_rewrite .И в большинстве случаев у хорошего хостера он установлен.
 

SiMM

Новичок
> Нет конечно папки bla-bla-bla нету и папки menu_1.
А почему, простите, в случае http://www.mysite.ru/menu/1/bla-bla-bla/ она должна быть? Почему Вы решили, что недостаточно иметь файла menu.php в корне сайта?
 

andronof

Новичок
Автор оригинала: SiMM
> Нет конечно папки bla-bla-bla нету и папки menu_1.
А почему, простите, в случае http://www.mysite.ru/menu/1/bla-bla-bla/ она должна быть? Почему Вы решили, что недостаточно иметь файла menu.php в корне сайта?
Нет не должна быть.А при включённой опции MultiViews должен быть только menu.php к которой и будут обращаться все запросы вида http://www.mysite.ru/menu/.../..././...././/./././.
Расмотрим пример.Например у нас есть сайт с меню .Ну например news,hardware,softwar(это только в примере 3 но их может бы гороздо больше).и сайт называется www.mysite.ru
Пользователь решил зайти на это сайт и ввел в строку браузера www.mysite.ru.И он увидел кроме содержания главной страницы, еще например слева меню.Жмет на ссылку news чтобы увидеть все новости.И вот здесь например что бы не парится с каличеством меню логичнее сделать ссылку вида www.mysite.ru/menu/news/(и вся обработка меню ложится на файл menu.php).Допустим все новости написаны в кратком содержании и чтобы увидеть ее полностью надо нажать на ссылку подробнее.И ссылка преобретает вид www.mysite.ru/menu/news/10/ где 10 это id новости в базе.Пользователь ее прочитал и что бы ввернутся назад он просто стирает в конце строки 10/. и попадает опять на все новости.Он и их все прочитал.и по привычке стирает /news/ и получается ссылка вида www.mysite.ru/menu/.А что в ней выводить она получается нелогичной.Можно ее сделать копией главной страницы.А можно сделать переадресацию на www.mysite.ru. Можно вообще ошибку выдать.Столько вариантов и все они(имхо) не красивые.Конечно вариант того что пользователь сотрёт путь ручками маловероятен.но согласитесь строка вида www.mysite.ru/news/10/ выглядит понятней чем строка www.mysite.ru/menu/news/10/.
И еще ,извините , но мне кажется что я не правильно понял ваш вопрос(меня не много запутали слова "недостаточно иметь")и я наверное не на тот вопрос ответил.Если да то напишите вопрос подробнее.Спасибо.
 

maxru

МИФИст
AmdY раз уж Вы заговорили об ссылках вида http://www.mysite.ru/index.php/menu/news/10/, то у меня появился вопрос: а как сделать так, чтобы сервер ругался при попытке открыть http://www.mysite.ru/index.php/ , то каким-то случайным образом в индекс яндекса =) попала такая ссылка и расплодилась и в результате на выдаче получаются такие вот ссылки. Естественно, при открытии страницы на ней нет картинок и css тоже не подключается.
Советов, вроде "сделайте все ссылки абсолютными" не надо, я не хочу перекапывать весь shopscript, да и переезжаем с него постепенно. Просто нужна временная мера.
 

AmdY

Пью пиво
Команда форума
maxru, странно.
не нужно запрещать открытие по такой ссылке, а нужно правильно прописывать правила для реврайта, тогда будет работать как надо.
 

andronof

Новичок
Автор оригинала: AmdY
а чем тебе не нравится в отсутствии mod_rewrite урлы типа:
http://www.mysite.ru/index.php/menu/news/10/
или http://www.mysite.ru/menu.php/news/10/, в зависимости от архитектуры движка
Из этих двух вариантов ссылок будет наверное интереснее всего ссылка
вида http://www.mysite.ru/index.php/news/10/ или
http://www.mysite.ru/index/news/10/.
Да при отсутствии mod_rewrite это мне кажется не плохой вариант.
Например Главная страница будет http://www.mysite.ru/index/ или
http://www.mysite.ru/index.php.А при попытке зайти на http://www.mysite.ru/ сервер будет перенаправлять
на http://www.mysite.ru/index/ .Спасибо.
Я в самом начале спрашивал еще один вопрос.
Какую статью не читаешь везде пишут что опции MultiViews и ErrorDocument и модуль mod_rewrite нагружают сервер.
Но никто не говорит на сколько не приводит ни каких сравнений хоть с чем-нибудь.Ну например если взять какой-нибудь вариант и если он будет увеличивать нагрузку хоть на 0.01% от нагрузки выполнения скрипта то при 1000 пользователях.нагрузка станет уже 10 %.То это уже много.Но мне кажется что если все выше описанный мною пример верен и я негде не заблуждаюсь можно посидеть часок или два но оптимизировать свой код на эти 0.01 % и в результате не какой лишней нагрузки не будет.
Все выше сказанное я писал только из своих умозаключениях и вполне может быть что я сильно заблуждаюсь.Поправьте меня если это так.
Дак какой из этих методов больше(меньше) всего нагружает сервер?
 

cDLEON

Онанист РНРСlub
andronof
Послушай друг, ты будешь программить либо трепаться?
Тебе же явно сказали, что самым лучшим и удобным вариантом будет mod_rewrite. К чему все эти вопросы? Не маразм ли это?

-~{}~ 11.07.07 05:25:

Может быть просто у тебя нет желания разбираться c mod_rewrite ?
 

andronof

Новичок
Автор оригинала: cDLEON
andronof
Послушай друг, ты будешь программить либо трепаться?
Тебе же явно сказали, что самым лучшим и удобным вариантом будет mod_rewrite. К чему все эти вопросы? Не маразм ли это?

-~{}~ 11.07.07 05:25:

Может быть просто у тебя нет желания разбираться c mod_rewrite ?
Нет я еще выше написал что mod_rewrite будет лучшем вариантом.И давно его уже использую.Тем более разбираться с ним не так уж и сложно.Главное понять регулярные выражения.А остальные вопросы были так из интереса спрошены.
Хотел более детально понять что за чем и почему.
Спасибо всем кто отвечал на мои вопросы.
 
Сверху