.htaccess — Как PHP создает новые HTML-страницы?

Как многие из вас знают, когда кто-то создает вопрос StackOverflow, создается новая страница, которая также видна в различных поисковых системах. Мне было интересно, как PHP-код создал эти страницы. Оказывается, что большинство таких веб-сайтов имеют одну страницу, что-то вроде profile.php, и она загружает данные из базы данных MySQL. Мой вопрос заключается в следующем: если существует только один физический файл, как можно изменить URL-адрес и как Google отображает все страницы / профили / вопросы с таких сайтов, как StackOverflow или Facebook, если существует только одна фактическая страница?

2

Решение

Посмотрите на URL страницы, на которой находится этот вопрос:

http://stackoverflow.com/questions/39457314/how-does-php-create-new-html-pages

На жестком диске сервера нет физического файла. Есть только один главный скрипт, который называется «показать страницу с вопросом». Что произойдет, в целом, для динамически генерируемой страницы:

  1. пользователь нажимает или иным образом переходит на динамическую страницу
  2. Веб-сервер принимает запрос и запускает перезапись на URL
  3. URL-адрес изменяется со «дружественного» URL-адреса на «уродливый» внутренний. Хотя Stackoverflow не написан на PHP, если бы это было так, вы бы внутри получили нечто подобное:

    http://stackoverflow.com/showquestion.php?id=39457314
    
  4. Веб-сервер выполняет showquestion.php скрипт

  5. Код в скрипте выполняет всю необходимую работу по созданию страницы ответов: получает текст вопроса, получает ответы и т. Д., Форматирует его в html и отправляет HTML пользователю.
2

Другие решения

Как явствует из комментариев, это обрабатывается перезаписью URL на HTTP-сервере.

Это может помочь узнать, что URL-адрес соответствует физическому файлу PHP с тем же путем по умолчанию, но это может быть переопределено. Вы можете создать правила перезаписи Apache, чтобы запрос URL обрабатывался любым скриптом PHP.

Пример показан в https://framework.zend.com/manual/1.12/en/project-structure.rewrite.html:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Таким образом, все URL-адреса действительно обрабатываются index.phpнезависимо от того, что говорит URL. В этом сценарии код может прочитать исходный запрос, а затем код может решить, что компоненты этого запроса означают для приложения.

1

Apache (и, следовательно, PHP) использует mod_rewrite переписать URL-адреса в более читаемые имена, похожие на каталоги. Например, вы можете использовать его, чтобы включить

www.example.com/index.php?area=blog&which=entry

в

www.example.com/blog/entry

Заголовки HTTP не обязательно должны соответствовать реальной файловой системе, поэтому Apache «подделывает» их во все, что хочет.

Возможно, возможно обойтись без mod_rewrite, но я не знаю достаточно, чтобы сказать

0

Ответ — маршрутизация.

Возьмем пример URL-адреса … httml: //www.mysite.com/users/profile/jimmy

Если вы используете систему маршрутизации (у большинства фреймворков такая есть), то все, что идет после .com / (называемое ‘path’), обрабатывается как карта. Система маршрутизации использует эту карту для поиска данных.

Многие системы маршрутизации разбивают этот «путь» на сегменты. Приведенный выше пример будет разбит на следующие сегменты.

  • сегмент 1: пользователи
  • сегмент 2: профиль
  • сегмент 3: Джимми

Для большинства фреймворков система маршрутизации интерпретирует карту следующим образом …

controller/action/param-1/param-2/param-3

«Контроллер» относится к «классу» в объектно-ориентированном PHP

«Действие» — это еще одно слово для «функции», также называемое «метод».

наконец, параметры относятся к данным, которые мы хотим передать, возможно, это имя, обычно это идентификатор.

Маршрутизатор возьмет приведенный выше пример ‘path’ и продолжит поиск следующим образом …

Занимает первый сегмент. Ищет «класс» под названием пользователи. Находит класс под названием пользователи. Ищет функцию с именем profile внутри класса, называемого users. Находит функцию профиля. Передает данные в функцию. Выполняет функцию с переданными данными.

Вот базовая структура кода, которую маршрутизатор будет искать

<?php

class Users // the controller
{
function profile($name) // the action
{
'Profile for ' . $name; // the passed data 'jimmy'
}
}
0

Например, вы указываете поисковым системам «Google, Bing, ..etc», чтобы они видели ваш веб-сайт, давая им sitemap.xml список ваших страниц, разрешить их веб-ботам (паукам) доступ также к сайту и сканировать данные и ссылки, у вас может быть одна страница как posts.php и это отличается с параметрами posts.php?id=123 или же posts.php?name=mypost

Отредактировано:
Если вы хотите использовать один файл posts.php и сделать сайт http://domain.com/posts/posttitle вам нужно применить шаблон Front Controller ссылка на сайт и это подразумевает настройку сервера Apache / Nginx для перенаправления запросов в один файл (перезапись URL), и этот файл содержит логику для обработки запроса или использования инфраструктуры MVC

0
По вопросам рекламы [email protected]