if(У_НАС_ЕСТЬ_ЧТО_ПОКАЗАТЬ)
{
include('page1.php');
}
else
{
include('404.php');
}
Подскажите. Обработчик запросов: mod_rewrite или AddHandler+Action
На сайте происходит запрос страницы, например http://site.com/forum/page.html
Такой папки и страницы физически не существует. Необходимо перехватывать запросы посетителей и запускать обработчик этих запросов, например PHP скрипт. При запуске обработчика ему передается в параметре путь запрошенной страницы чтобы этот обработчик смог вывести соответствующее содержание.
Я нашел два способа решения этой проблемы:
1. создаю mod_rewrite который запустит скрипт и передаст ему в параметре запрошенный путь
2. в .htaccess пишу следующее:
AddHandler htm-handler .html
Action htm-handler "htm.php?"
В первом случае можно запросить любой путь и скрипт вызовется для его обработки. Недостаток в том, что этот mod_rewrite engine работает медленно в связи с присутствием регулярных выражений (может это и не так).
Во втором слуучае обработчик будет запущен лишьв том случае, когда запрошенная директория существует. Способ этот мне подходит, однако не подходит лишь то, что требуется создавать директории, которых может быть очень много.
Прошу Вас дать мне совет по данной теме, может кто знает как настроить обработчик Apach, тогда как у меня обычный хостинг план на сервере хостера. Так же хочу получить информацию о том способе, который работает быстрее (например в mod_rewrite мне не нравится что он медленный).
Спасибо за ваше внимание. Жду ваших предложений.
Это не так. Тебе хватит его производительности за глаза.
[QUOTE=eliteMOBILE.net]
Во втором слуучае обработчик будет запущен лишьв том случае, когда запрошенная директория существует. Способ этот мне подходит, однако не подходит лишь то, что требуется создавать директории, которых может быть очень много.
[/QUOTE]
А что мешает добавить строку: ErrorDocument 404 ПУТЬ_К_СКРИПТУ
А вообще надо нормально настроить mod_rewrite и не придумывать "запретные страницы камасутры". Зачем самому себе усложнять жизнь. А насчет медлительности mod_rewrite... Лично я не замечал ничего такого. Лучше тебе заняться оптимизацией своих скриптов и алгоритмов - уверяю тебя что там тормозов несравнимо больше.
- Вот тебе две таблетки,- сказал Морфеус, - красная и синяя.
- Зачем? - спросил Нео,- я не принимаю наркотики.
- Дурак! Одна из них логин от Матрицы, а вторая пароль.
[/QUOTE]
Классная подпись!
У меня на одном движке предполагается размещать до тысячи сайтов, каждый из которых будет хорошо посещаем. В таком случае движек должен обработать много запросов. Мне нужен наиболее быстрый вызов обработчика....
Спасибо.
В любом случае mod_rewrite будет быстрее, чем тупой разбор урла средствами РНР. Используй mod_rewrite и не переживай.
Буду очень вам признателен.
Основные минусы использования 404 ошибки является то что данные передаваемые методом POST не могут быть получены. Они будут переданы несуществующей странице и в итоге будут утеряны. С mod_rewrite такого не происходит. К тому же в любом случае обработка средствами РНР будет медленнее чем скомпилированным модулем коим является mod_rewrite.
Минусы использования mod_rewrite: относительно сложно написать правила, не будет работать под другими веб-серверами (хотя к 404 ошибке это тоже относится) - настройки для других серверов придется писать заново с нуля.
Но ведь настройки я напишу у себя в .htaccess и их же перенесу на сервак. Здесь проблеем я не вижу
> хотя к 404 ошибке это тоже относится
А как выдать скриптом 404 ошибку. Я в течение двух лет думал над этим, но кроме Header('Location: http://site.com/404.shtml') другого выходя не нашел. Может есть способ вывода браузеру ошибки 404 ???
Но ведь настройки я напишу у себя в .htaccess и их же перенесу на сервак. Здесь проблеем я не вижу[/QUOTE]
Я имею ввиду веб-серверы которые НЕ АПАЧ
[QUOTE=eliteMOBILE.net]
> хотя к 404 ошибке это тоже относится
А как выдать скриптом 404 ошибку. Я в течение двух лет думал над этим, но кроме Header('Location: http://site.com/404.shtml') другого выходя не нашел. Может есть способ вывода браузеру ошибки 404 ???[/QUOTE]
Никак. Это ошибка сервера а не клиента. А я имел ввиду в .htaccess прописать:
ErrorDocument 404 script.php
и уже в файле script.php обрабатывать URL. Если страница не существует, то веб-сервер вызовет script.php. Таким образом мы получаем данные по запросу GET (потому что они содержатся в адресе) а вот POST мы теряем.
Я скорее всего так и сделаю. Буду пользоваться rewrite engine.
Я все таки хотел бы знать, есть ли способ перехватывать запросы сервера и давать их на обработку своему скрипту
Я скорее всего так и сделаю. Буду пользоваться rewrite engine.
Я все таки хотел бы знать, есть ли способ перехватывать запросы сервера и давать их на обработку своему скрипту[/QUOTE]
Читайт внимательнее что пишут
В .htaccess добавь строку:
ErrorDocument 404 script.php
И управление будет передано скрипту script.php (хотя точнее не управление, а будет вызван этот скрипт)
Спасибо за помошь. Вы мне помогли разобраться с rewtite поэтому я прикинул, и понял что использование mod_rewrite будет для меня лучше всего.
Спасибо за помошь!
Кстати, в силе остается вопрос о несуществующей странице. Предположим что запустился мой скрипт обработчик, посмотрел что такую страницу он создать не сможет и должен сообщить клиенту ошибку 404. Я делаю это через header пересылая клиента на страницу 404.shtml. Может есть с PHP стандартная функция вывода 404 ошибки???
Случайно два раза продублировал сообщение, решил заменить его вот этим текстом :)
Пока нет. Обещали сделать сразу после функции автодизайнера. А потом выпустят специальную функцию liters GetSomeBeer(integer) которая на вход будет принимать количество бутылок и возвращать пиво в литрах. :D
404 страница - это обычная страница ничем не отличающаяся от остальных. Логика проста как старый веник:
Код: