Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Основы PHP...

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Но что-то нужно выдать на запрос браузера по этим элементам? Что конкретно выдать, какой ответ?

выдавать 404, если это не страница.
и нужно правильно создавать rewriterule, чтобы не перехватывать существующие файлы (картинки, css, js файлы и так далее). если не хотите, конечно, выдавать через скрипт их.
 

Цитата:
И главное – как отличить первый запрос, по которому нужен поиск в базе, от последующих? Как это делается на практике?
Может быть, в коде запроса есть какой-то признак, что запрос вторичный, что он порожден браузером?

по тому, есть ли файл на самом деле, по типу URL (например, все ajax запросы идут на /ajax/ и так далее). можно определить и тип запроса, как пример - https://heera.it/detect-ajax-request-php-frameworks

Всего записей: 13740 | Зарегистр. 20-09-2014 | Отправлено: 20:33 24-01-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый вечер!
 
На сайте с помощью .htaccess организована единая точка входа - index.php.
 
<IfModule mod_rewrite.c>  
    RewriteEngine On  
    RewriteBase /  
 
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteRule ^(.*)$ /index.php  
</IfModule>  
 
ErrorDocument 404 /error404.html
 
 
 
 
Файл error404.html лежит в корне сайта.
 
На странице index.php имеется такой код:
 
include '../config.php';
 
 
    $url = $_SERVER['REQUEST_URI'];
 
    $query = mysqli_query($db, "SELECT * FROM `content` WHERE `url` = '$url'");
    $row = mysqli_fetch_assoc($query);
 
    if ($row)
    {
        $text = $row['text'];
        echo $text;
    }
    else
    {
        header("HTTP/1.1 404 Not Found");
    }
В таблице content для одного из значений url занесен простейший код страницы. Если в адресной строке браузера набрать этот url, то страница нормально воспроизводится. А для всех остальных адресов должен выдаваться отклик 404 и показываться страница error404.html.
 
Отклик 404 есть, а вот страница error404.html не показывается.
 
Конечно, можно после header("HTTP/1.1 404 Not Found"); написать
readfile(__DIR__ . '/error404.html');
 
И тогда страница 404 будет показана, но, как мне кажется, это сомнительный ход: ведь не зря же в типовой .htaccess (в любой CMS) повсеместно вписывается ErrorDocument 404 /error404.html ?
Может быть, надо что-то другое сделать, опираясь именно на эту запись?

Всего записей: 232 | Зарегистр. 07-09-2016 | Отправлено: 18:40 26-01-2023 | Исправлено: Vladsvn, 20:11 26-01-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Может быть, надо что-то другое сделать, опираясь именно на эту запись?

нет, в CMS 404 страница генерится своя.
просто header мало, нужно выдать еще содержимое страницы с сообщением.
 

Цитата:
readfile(__DIR__ . '/error404.html');

если хотите, но брать нужно из конфигурации сервера. либо выводить свою.
 
можно сделать подзапрос к серверу на заранее настроенную 404 ссылку, чтобы не перехватывал index.php, но если сообщение об ошибке выводит URL запроса, будет отображена она, что плохо.
www.php.net/virtual

Всего записей: 13740 | Зарегистр. 20-09-2014 | Отправлено: 20:31 26-01-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я планирую вот такую структуру url страниц: /wowa/leto/ . Без динамической части. Проверка допустимости url на буквы, цифры, дефис и слеши. Это одновременно и защита от инъекций.
 
А служебные и сервисные файлы могут иметь динамическую часть: /leto.php?abc=12&bcd=22 Но это только реально существующие файлы, и их будем проверять соответствующим образом на допустимость параметров отдельно в том скрипте, в котором будут использоваться. На единую точку входа они не попадут.
 
Сейчас на странице index.php такой код:
 
    include '../config.php';
 
    $url = $_SERVER['REQUEST_URI'];
 
    // Проверка по маске. Только латиницa, цифры, дефис и слеш
    $url = strtolower($url);
 
    if (!preg_match("#^[a-z\d\-\\\\]+$#", $url))
    {
        $url = trim($url, '/');
        $query = mysqli_query($db, "SELECT * FROM `content` WHERE `url` = '$url'");
        $row = mysqli_fetch_assoc($query);
 
        if ($row)
        {
            header("Cache-Control: public, max-age=2500000");
            $text = $row['text'];
            echo ($text);
        }
        else
        {
            header("HTTP/1.1 404 Not Found");
            readfile(__DIR__ . '/error404.html');
        }
    }
    else
    {
        header("HTTP/1.1 404 Not Found");
        readfile(__DIR__ . '/error404.html');
    }
 
В базе простейший HTML код страницы.
 
Вроде бы, работает: на правильный url, имеющийся в базе, показывает записанную в базе страницу, на остальные дает страницу 404.
 
Как полагаете, можно использовать эту конструкцию?
 

Всего записей: 232 | Зарегистр. 07-09-2016 | Отправлено: 20:39 27-01-2023 | Исправлено: Vladsvn, 21:20 27-01-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Как полагаете, можно использовать эту конструкцию?

все зависит от ситуации. делает все так, как хочется - значит нормально.
 

Цитата:
        header("HTTP/1.1 404 Not Found");
        readfile(__DIR__ . '/error404.html');

если ничего после не делается, что добавить exit
 

Цитата:
$url = strtolower($url);

обычно, если не указано иначе, кодировка в mysql и так _ci.

Всего записей: 13740 | Зарегистр. 20-09-2014 | Отправлено: 21:53 27-01-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
если ничего после не делается, что добавить exit
Если отсутствует несколько файлов, то браузер сделает соответствующее количество запросов, поэтому из скрипта выйти не получится.  
 
 
На выходе вот такие заголовки. Это нормально?
 
https://ibb.co/YtTPZPC

Всего записей: 232 | Зарегистр. 07-09-2016 | Отправлено: 21:58 27-01-2023 | Исправлено: Vladsvn, 22:05 27-01-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
На выходе вот такие заголовки. Это нормально?

что в них может быть ненормального?

Всего записей: 13740 | Зарегистр. 20-09-2014 | Отправлено: 22:03 27-01-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может быть, нужны и другие заголовки?  
Или этих достаточно?
 
Вот у сайта VC.RU  https://ibb.co/bRjVNKG

Всего записей: 232 | Зарегистр. 07-09-2016 | Отправлено: 22:06 27-01-2023 | Исправлено: Vladsvn, 22:11 27-01-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Может быть, нужны и другие?
Или этих достаточно?

какие и зачем? работает же?
 

Цитата:
Вот у сайта VC.RU

и что? у вас и CMS по сути еще нет, зачем что то накручивать?
 
https://developer.mozilla.org/ru/docs/Web/HTTP/Headers
часть из них там потому, что используется CloudFlare

Всего записей: 13740 | Зарегистр. 20-09-2014 | Отправлено: 22:11 27-01-2023 | Исправлено: Mavrikii, 22:13 27-01-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Понятно, спасибо!
 
Добавлено:
Понятно, спасибо!

Всего записей: 232 | Зарегистр. 07-09-2016 | Отправлено: 22:12 27-01-2023
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Компьютерный форум Ru.Board » Интернет » Web-программирование » Основы PHP...


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2023

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru