MultiViews и ErrorDocument

  • Автор темы Автор темы andronof
  • Дата начала Дата начала

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. Здесь как я понимаю все проще говоришь серверу перенаправлять все запросы с ошибками в какой-нибудь файл и там разбираешь все пути.Но этот вариант излишне нагружает сервер, что очень не хочется.

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

-~{}~ 08.07.07 19:22:

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

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

Если при запросе http://yousite/test/ перенаправит на корень сайта значит реврайт есть
 
Автор оригинала: 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/ перенаправит на корень сайта значит реврайт есть
Спасибо. Это можно узнать и на сайте хостера.Но хотелось что бы выбор хостера не зависел от того стоит у него это модуль или нет.
 
вариант 1 - прописывай везде index.php
вариант правильный - меняй хостинг, если уж хостер не удосужился установить mod_rewrite, то такому хостеру доверять нельзя.
 
Автор оригинала: AmdY
вариант 1 - прописывай везде index.php
Мне кажется что если например url имеет вид http://www.mysite.ru/news/n/ , где n номер новости.
То можно например что бы скрипт который добавляет новость в Базу Данных еще и создавал папку, а в нее ложил файл index.php с каким нибудь шаблонным содержанием.В принципе так можно сделать и для всего сайта.Но мне кажется что это как-то не правильно.И это будет похоже на автоматизированный вариант который предложил SIMM.
 
andronof
а еще можно писать html файлы для каждой странички.

mod_rewrite самый адекватный ответ решения этой проблемы, все уже сказано.
 
> Ты имеешь ввиду что надо создать каталоги в них положить файлы.
Вы хотите сказать, что в Вашем случае http://www.mysite.ru/menu_1/bla-bla-bla/
есть папка bla-bla-bla?
 
Автор оригинала: 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 .И в большинстве случаев у хорошего хостера он установлен.
 
> Нет конечно папки bla-bla-bla нету и папки menu_1.
А почему, простите, в случае http://www.mysite.ru/menu/1/bla-bla-bla/ она должна быть? Почему Вы решили, что недостаточно иметь файла menu.php в корне сайта?
 
Автор оригинала: 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/.
И еще ,извините , но мне кажется что я не правильно понял ваш вопрос(меня не много запутали слова "недостаточно иметь")и я наверное не на тот вопрос ответил.Если да то напишите вопрос подробнее.Спасибо.
 
AmdY раз уж Вы заговорили об ссылках вида http://www.mysite.ru/index.php/menu/news/10/, то у меня появился вопрос: а как сделать так, чтобы сервер ругался при попытке открыть http://www.mysite.ru/index.php/ , то каким-то случайным образом в индекс яндекса =) попала такая ссылка и расплодилась и в результате на выдаче получаются такие вот ссылки. Естественно, при открытии страницы на ней нет картинок и css тоже не подключается.
Советов, вроде "сделайте все ссылки абсолютными" не надо, я не хочу перекапывать весь shopscript, да и переезжаем с него постепенно. Просто нужна временная мера.
 
maxru, странно.
не нужно запрещать открытие по такой ссылке, а нужно правильно прописывать правила для реврайта, тогда будет работать как надо.
 
Автор оригинала: 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 % и в результате не какой лишней нагрузки не будет.
Все выше сказанное я писал только из своих умозаключениях и вполне может быть что я сильно заблуждаюсь.Поправьте меня если это так.
Дак какой из этих методов больше(меньше) всего нагружает сервер?
 
andronof
Послушай друг, ты будешь программить либо трепаться?
Тебе же явно сказали, что самым лучшим и удобным вариантом будет mod_rewrite. К чему все эти вопросы? Не маразм ли это?

-~{}~ 11.07.07 05:25:

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

-~{}~ 11.07.07 05:25:

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