[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Зацикливается перенаправление
J1upuk

if(!isset($_GET['module'])) {
$_GET['module'] = 'static';
$_GET['page'] = 'main';
} elseif(!file_exists('/modules/'.$_GET['module'].'/'.$_GET['page'].'.php')) {
header("Location: /index.php?module=errors&page=404");
} else {
include '/modules/'.$_GET['module'].'/'.$_GET['page'].'.php';
}


Браузер пишет "Невозможно отобразить. На этой странице обнаружена циклическая переадресация".

Суть такая, если приходит пустой ГЕТ - кидает на главную, если не пустой то смотрим, есть ли файл с таким именем в указанной директории, если нет - 404, если есть - инклюд. Так вот дело в том что деректория /modules/errors/404.php существует, а скрипт почему то зацикливается на переадресации. Кто подскажет что не так?
FatCat
Файл /modules/errors/404.php существует?

_____________
Бесплатному сыру в дырки не заглядывают...
J1upuk
Цитата
Так вот дело в том что деректория /modules/errors/404.php существует
FatCat
Цитата (J1upuk @ 25.04.2014 - 20:33)
деректория /modules/errors/404.php существует

Значит не на том уровне вложености директорий.
Так как переадресация прописана в одном месте кода, и только при условии не найденного файла - других вариантов я не вижу.


Хотя зачем так мудрить с переадресацией? Проще если файл не существует, отдать нужные заголовки 404 и заинклюдить файл с текстом ошибки без переадресации.


_____________
Бесплатному сыру в дырки не заглядывают...
J1upuk
Нашел ошибку, дурная моя голова, я

include '/modules/'.$_GET['module'].'/'.$_GET['page'].'.php';


в else засунул, а он должен быть вне конструкции) Можно закрыть)
AllesKlar
На первый взгляд все верно.
нужно отлачик запускать.
Или же сам6
1. после header("Location:"); всегда должен быть exit();
header("Location: "); - это ты просто отправил заголовок в браузер. да, браузер у тебя перейдет по этому адресу, НО скрипт будет работать дальше. И если ты там что-то пишешь в базу или сессию, то это запишется. header("Location: "); Не прерывает работу скрипта.

2.
'/modules/'.$_GET['module'].'/'.$_GET['page'].'.php';

Маленький ужастик.
Опртимизируем:
$file_path = '/modules/'.$_GET['module'].'/'.$_GET['page'].'.php';  // далее уже работай с $file_path во всех местах. Это исключит опечаток и ошибок.
//echo $file_path; отладочная информация
//var_dump(file_exist($file_path));
//die();


3. Не самый лучший вариант страницу 404 генерить из путей. Раз она у тебя постоянная, так и пиши
include ' /modules/errors/404.php';
die();


_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.