Корректен ли такой редирект?
Создана: 31 Октября 2012 Срд 0:39:16.
Раздел: "Веб-строительство и интернет-проекты"
Сообщений в теме: 19, просмотров: 19013
-
В htaccess прописал следующий редирект
ErrorDocument 404 /404.shtml
Раньше правило было такое
RewriteRule ^(.*)$ /index.php?query=$1 [L]
Но возвращался 200 ответ и все время ошибка с headers вылазила, щас корректно вылазит заглушка и 404 ошибко
P.S. И еще. запрещать ли в robots.txt 404 заглушку, у меня с нее стоит ссылка на главную (без принудительного редиректа, просто ссыль) или позволить индексировать эту страницу? -
-
lorien писал : > P.S. И еще. запрещать ли в robots.txt 404 заглушку, у меня с нее стоит ссылка на главную (без принудительного редиректа, просто ссыль) или позволить индексировать эту страницу?
Поисковики не индексируют страницы, которые выдаются с кодом 404
Я имел ввиду саму страницу заглушку 404.shtml к примеру у меня называется
P.S. Печаль но вновь прописанное правило начало возвращать 404 для всех страниц. вернул назад. теперь по-прежнему вылазит 200 код для несуществующих страниц -
Тут самописная CMS, проблема в том что страницы левые пустые генерятся если мы вводим любой адрес, но по сути их в базе нет, а значит 404 должна выдаваться, а она не выдается -
Vision писал :
Тут самописная CMS, проблема в том что страницы левые пустые генерятся если мы вводим любой адрес, но по сути их в базе нет, а значит 404 должна выдаваться, а она не выдается
насколько я понимаю это как раз в php и высмеивается чаще всего что велосипеды не работают и чтобы починить нужно огород городить. -
Vision писал :
Тут самописная CMS, проблема в том что страницы левые пустые генерятся если мы вводим любой адрес, но по сути их в базе нет, а значит 404 должна выдаваться, а она не выдается
Как я понял вам не в .htaccess'е править нужно, а в самописной cms. Это же она генерирует страницы, даже если их нет и возвращает на верх Apache. А тот, получив данные, ставит '200 OK' в код состояния. -
Monk Albino писал :
Как я понял вам не в .htaccess'е править нужно, а в самописной cms. Это же она генерирует страницы, даже если их нет и возвращает на верх Apache. А тот, получив данные, ставит '200 OK' в код состояния.
Да так и есть, знать бы еще что править -
-
Monk Albino писал :
А ну это уже совсем другой вопрос: Подскажите/помогите/посоветуйте специалиста, который бы покопался в коде и внёс бы правки?
Нашел ошибку в классе, который правили мои знакомые криворукие млин.
Цитата:
<?php
class Feedback {
function Generate() {
global $config;
$output = $this -> Form();
return $output;
}
function Form($vars = array()) {
ob_start();
?>
Убрав пустую строку в начале файла класса перед открывающим тегом <? php стал возвращаться 404 ответ. Поскольку php знаю на уровне букв, объяснить это не могу.
До этого возвращалось предупреждение Warning: Cannot modify header information - headers already sent by (output started at Z:\home\old\www\class\class.feedback.php:2) in Z:\home\old\www\index.php on line 44
и сообщение Ошибка 404: страница не найдена.
Но код все равно 200 шел -
Как я понял проблема решена и 404ый возвращается на пустых страницах, да?
Пустая строка влияла из-за того, что веб-сервер должен получить вначале от скрипта header-заголовки, а потом уже данные. 404 ответ - это header-заголовок, а пустая строка - это уже какие-то данные. Собственно предупреждение об этом и говорит. -
Monk Albino писал : Как я понял проблема решена и 404ый возвращается на пустых страницах, да?
Пустая строка влияла из-за того, что веб-сервер должен получить вначале от скрипта header-заголовки, а потом уже данные. 404 ответ - это header-заголовок, а пустая строка - это уже какие-то данные. Собственно предупреждение об этом и говорит.
Решилась да несовсем.
То есть для адресов [внешняя ссылка]
решилась,
Но есть еще подгаталоги вида [внешняя ссылка]
и если там набрать ересь какую-нибудь типа
[внешняя ссылка]
он возвращает нормальную страницу [внешняя ссылка] и 200 код
Для каталогов у меня написано правило
#rules for catalog
RewriteCond %{REQUEST_URI} ^/catalog.*$
RewriteRule ^catalog\.htm$ /catalog [R=301,L]
Надо какое-нибудь строгое правило или условия где-то задать чтобы возвращались только страницы из базы, а несуществующие не генерировались и не возвращались.
Вот код, генерящий страницы
Цитата:function Href() {
if ($this -> property["parent_id"] == 0) return "/".$this -> property["name"];
else {
$tmp = new Object;
$tmp -> Init($this -> property["parent_id"]);
return $tmp -> Href()."/".$this -> property["name"];
}
}
Parent_id = 0 это странице в корне, в таблице есть еще 6 и 7 это подкаталоги catalog1 и catalog2, может кто подскажет условие, код
Полный листинг:
<?php
class Object {
var $obejct_id = 0;
var $property = array();
function Init($object_id) {
$result = MySQL::DBQuery("select * from `prefix_object` where `object_id`=".$object_id);
if ($row = MySQL::FetchArray($result)) {
$this -> InitFromRow($row);
return true;
} else return false;
}
function InitFromRow($row) {
$this -> object_id = $row["object_id"];
$this -> property = $row;
}
function InitByName($name, $parent_id = 0) {
$result = MySQL::DBQuery("select * from `prefix_object` where `name`=\"".$name."\" and `parent_id`=".$parent_id);
if ($row = MySQL::FetchArray($result)) {
$this -> InitFromRow($row);
return true;
} else return false;
}
function Href() {
if ($this -> property["parent_id"] == 0) return "/".$this -> property["name"];
else {
$tmp = new Object;
$tmp -> Init($this -> property["parent_id"]);
return $tmp -> Href()."/".$this -> property["name"];
}
}
function GetPath($linkto = false) {
if($linkto) $output = "<a href='".$this -> Href()."'>".$this -> property["title"]."</a>";
else $output = $this -> property["title"];
if ($this -> property["parent_id"]) {
$p = new Object;
$p -> Init($this -> property["parent_id"]);
return $p -> GetPath(true)." / ".$output;
}
else return $output;
}
}
?>
Структура таблицы:
object_id parent_id name
________________________
26 6 wemanhospital.htm
6 0 articles1
8 7 basic.htm
7 0 catalog2 -