Обработчик 404 ошибки
Пошел следующим путем -- создал обработчик 404 ошибки кинул туда
header("http/1.1 200 Ok");
$url=$_SERVER['REDIRECT_URL'];
Дальше switch`ем обрабатываю $url, настраиваю свои переменные и инклудом подключаю собственно сайт...
Это позволило сохранить в УРЛовой строке "неправильный" адрес,
НО! (как же без НО :)
Вылез интересный глюк -- у многих людей "липовые" ссылки отрабатывают через раз, в то время как на других машинах все das ist gut!
зайдите посмотрите : http://evm.in.ua
Просто мистика...
ЗЫ. А есть ли какой-то менее извратный способ добиться "ХТМЛ" ссылок на чисто РНРшном движке? Мож я вобще бред натворил?...
Код:
AddType application/x-httpd-php .php .phtml .html
И вот опять сижу, уставившись в монитор, и никак в голове не укладывается: какая связь между php, html и обработкой 404? Может действительно пообедать? Видимость статичного сайта создаётся, IMHO, менее изощрённым способом.
Ну да ладно... Разъясните, что это за хитрость такая: редирект с помощью ошибки?
У меня в .htaccess на http://rio.kbtour.ru написано:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* /index.php
В корне сервера всего один файл index.php в котором всего одна строчка, инициализирующая работу. Адреса, которые передаёт браузер, отдалённо напоминают то, что можно увидеть в ftp. И ни на одной странице нет query_string.
Если я правильно понял - это и есть видимость "ХТМЛьного" сайта?
И что таким(\похожим) способом я могу получить
/test/qwerty
вместо
index.php?var1=1&var2=2....
Если да то как?
К примеру, выбираем адрес покрасивее, например, осмысленное spisok_kartinok.htm, который будет выводить скрипт pictures_list.php. Предполагается, что для выбора из БД нам нужно знать два параметра: какой-нибудь раздел (part), и... ну, пусть мы передаём страницу, для постраничного вывода (page_num).
Таким образом, мы имеем входящий адрес pictures_list.php?part=3&page_num=9. Из этого мы хотим получить ссылку в браузере, вида spisok_kartinok3_9.htm
Пишем в .htaccess, в разделе RewriteBase (разумеется, RewriteEngine должен быть приведён в состояние On):
RewriteRule ^(.*)spisok_kartinok([0-9]+)_([0-9]+).htm$ $1pictures_list.php?part=$2&page_num=$3
Всё очень просто. Это - регулярные выражения.
Как ни странно реврайтер помог -- все перенаправляю на индекс.рнр а там уже разбираюсь чего это человек от меня хочет...
В каком виде перенаправляется ошибка на индекс и какой ответ выдает сервер? Поподробнее...
Мой совет, лучше, если пользователь увидет сообщение об ошибке (будет знать что нет такой страницы), а поисковый робот пришедший на несуществующую страницу получит ответ сервера 404, иначе поисковик просто "склеит" несуществующую страницу и главную страницу, и в поиске главную уже никогда не выдаст.
Мой совет, лучше, если пользователь увидет сообщение об ошибке (будет знать что нет такой страницы), а поисковый робот пришедший на несуществующую страницу получит ответ сервера 404, иначе поисковик просто "склеит" несуществующую страницу и главную страницу, и в поиске главную уже никогда не выдаст.[/quote] Я так понял, что fanto сделал по моему первому совету:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* /index.php
Там ошибки не при чём. Просто в дальнейшем (после index.php) можно на том же PHP написать свой rewrite'р и отправлять клиента куда нужно.
Я в своё время тоже об нём думал. Но потом обчитавшись, что он сильно грузит сервак, решил это не делать. Написал маленький скрипт, и он мне заменяет этот самый реврайт + делает "хлебные крошки" :)
Хотя я так и не понял в чем же была проблема сначала:
Код:
<?
header("http/1.1 200 Ok");
$url=$_SERVER['REDIRECT_URL'];
switch ($url)
{
case "/about" : $page=1;$unter=main;break;
case "/about/main" : $page=1;$unter=main;break;
\\ и много-много еще
case "/hardware" : $page=3;$unter=comp_sys;break;
case "/software" : $page=4;$unter=lic_po;break;
default : $page=1;$unter=about;break;
}
{include 'index.php';}
?>
header("http/1.1 200 Ok");
$url=$_SERVER['REDIRECT_URL'];
switch ($url)
{
case "/about" : $page=1;$unter=main;break;
case "/about/main" : $page=1;$unter=main;break;
\\ и много-много еще
case "/hardware" : $page=3;$unter=comp_sys;break;
case "/software" : $page=4;$unter=lic_po;break;
default : $page=1;$unter=about;break;
}
{include 'index.php';}
?>
Ну и в htaccess прописал этот файл как обработчик 404 ошибки.