PHP - Урок 8. Точка входа в приложение. Настройка mod_rewrite и файл .htaccess

PHP - Урок 8. Точка входа в приложение. Настройка mod_rewrite и файл .htaccess



Предыдущие уроки:


Программируем на PHP - Введение

PHP - Запросы от браузера к серверу

PHP - Как работает сервер

PHP - Урок 4. PHP - интерпретатор

PHP - Урок 5. Переменные сервера и глобальные переменные

PHP - Урок 6. Конструкции print и echo. Кавычки одинарные и двойные и конкатенация строк

PHP - Урок 7. Переменные, константы и условия


Кое что важное чуть не забыл. Прежде чем переходить к написанию каркаса будущих сайтов и оператору switch - следует кое-что под настроить.

На многих сайтах можно встретить красивые URL в адресной строке.
Например они могут выглядеть так http://thesite.loc/my_article/mod_rewrite
Однако, если мы наберем эту ссылку в нашем тестовом сайте, то сервер apache будет искать папку my_article/mod_rewrite
Если эта папка бы была и в ней находился файл index.php (или index.html), то мы бы и увидели в браузере его (результат его работы).
Однако у нас будет динамический сайт (новостной блог, интернет магазин, социальная сеть и все вместе :))

Мы не будем создавать файлы таким образом. А расположим их в и библиотеках ядра нашего php-сайта (приложения).
А все запросы будем направлять на единственный корневой файл - index.php

Для этого нам понадобится подключенный модуль mod_rewrite. В нашем денвере он уже подключен.
На многих хостингах он также по умолчанию настроен.
Однако если у вас возникнут проблемы на реальном сервере следует проверить его настройки.
В файле сервера /etc/httpd/conf.modules.d/00-base.conf Например так:

[root@centos ~]# cd /etc/httpd/conf.modules.d
[root@centos conf]# ls
httpd.conf  magic
[root@centos conf]# vi 00-base.conf

И разкомментировать там строчку LoadModule rewrite_module modules/mod_rewrite.so - убрать # из ее начала.
Затем перезапустить сервер apache - systemctl restart httpd

Теперь когда все готово заходим в папку с нашим сайтом и создаем там в папке с сайтом (в нашем тестовом примере home/thesite.loc/www) файл .htaccess с таким содержимым
(Если вы работаете с денвером не забудьте его запустить)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

Здесь первая строчка говорит что ссылки должны обрабатываться модулем mod_rewrite.
Вторая говорит, что если запрашиваемый в URL файл действительно есть в папке с сайтом - то его возвращать как обычно и не задействовать переадресацию на index.php
Третья инструкция аналогична второй но действует для директорий.
Четвертая RewriteRule .* index.php [L] говорит, что все ссылки следует адресовать на файл index.php.

Что мы получили в итоге - а то что у нас теперь никогда не будет 404 Not Found (если мы сами его не придумаем).
Если файла или папки на нашем сайте не существует - то мы попадем на главный его файл index.php (точку входа в наше PHP-приложение).

Кстати не забудьте создать рядом c .htaccess (в корневой папке) собственно файл index.php
И напишем в нем например <h1>Это мое PHP-приложение</h1>

Теперь переходим в адресную строку браузера и набираем любые названия после адреса сайта через слеш, например http://thesite.loc/fgghh
Мы всегда будем попадать на файл index.php и видеть нашу надпись "Это мое PHP-приложение"
Однако если мы создадим в папке сайтом подпапку или файл - то сервер выдаст нам именно их, а не index.php это работа команд RewriteCond

Помните в прошлых уроках мы создали файл test.php - попробуйте запросить его http://thesite.loc/test.php
Тут отработает именно этот файл и вы получите его результат, а не index.php
Однако если вы запросите не существующий файл, например http://thesite.loc/test1.php то вас выведет на index.php, но не на страницу ошибки 404

Теперь самое главное. Зачем нам нужна такая точка входа.

Просто мы будем использовать запросы из адресной строки по-своему. Динамически. А не так как это делает сервер по умолчанию.

Прежде всего давайте посмотрим переменные сервера из глобального массива $_SERVER:
Добавим в файл index.php следующий код

<pre>
<?php 
 print_r($_SERVER);

(чтобы много не писать можно не закрывать теги - это иногда полезно :))
Функция print_r выведет массив переменных процесса сервера (то есть его окружение) и другую информацию о его работе (настройках)

Нас здесь чаще всего будет интересовать в этом массиве значение REQUEST_URI

Он содержит строку запроса, которую мы набираем после адреса нашего сайта.

Теперь давайте вместо просмотра всего массива переменных сервера выведем только нужное нам:

<h1>Это мое PHP-приложение</h1>
Строка запроса:
<?php 
    echo $_SERVER['REQUEST_URI'];

Теперь если мы введем в адресной строке например http://thesite.loc/hello/world
То увидим на странице соответственно Строка запроса: /hello/world.
Ну и так соответственно все что наберем там. В этом уроке нам как раз и нужно было это освоить.


В следующем уроки мы разберем как эту строчку из строки запроса использовать.
образованиеphpакадемияобучениеразработка
25%
206
70
3958.777 GOLOS
0
В избранное
Руслан Дорофеев
Сетевое программирование
70
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (6)
Сортировать по:
Сначала старые