как веб-сайты делают это index.php? something = somepage

я видел много сайтов на основе php, где неважно, куда вы перемещаетесь, застряв в index.php, и некоторые случайные параметры передаются в URL-адресе. и когда я смотрю версию с открытым исходным кодом, которая делает то же самое, index.php имеет кучу включений в них

Какой основной способ я могу сделать то же самое? это включает mod rewrite?

благодаря

Я видел это и лично считаю, что это ужасный дизайн. Особенно потому, что многие люди не склонны дезинфицировать параметр include, так что кто-то может включать любой файл, который они хотят, просто проходя по относительному пути.

mod_rewrite обычно используется для скрытия URL-адресов, таких как:

/index.php?path=user&include=account 

заменив его чем-то вроде:

 /user/account 

как это:

 RewriteEngine On RewriteBase / RewriteRule ^(\w+)/(\w+)$ /index.php?path=$1&include=$2 [L] 

Обычно я также добавляю что-то вроде этого:

 RewriteRule %{THE_REQUEST} \.php$ [R=404,L] 

Я забываю точный синтаксис, но в основном пользователь не может напрямую запрашивать файл php. Это должно быть сделано через другой RewriteRule (как и первый), который может сэкономить вам много головных болей с дезинфекцией ввода строки запроса, а также избежать всей проблемы PHP, создающей глобальные переменные для вещей, которые вы никогда не планировали (хотя они все еще могут POST для этого ).

Во всяком случае, вернемся к тому, почему я думаю, что это ужасная идея. Они делают это, потому что они, как правило, хотят иметь общий код на каждой странице (например, верхний и нижний колонтитулы). Я бы сказал, что вам лучше всего включить обычный файл в верхней части каждой из ваших страниц. Это более простой и понятный дизайн.

Это очень распространенный шаблон проектирования, а не только для PHP – я впервые использовал его для Cold Fusion с моделью под названием Fusebox, но подобные идеи существуют для всех языков сценариев.

В основном страница индекса собирает отображаемый HTML в зависимости от того, что передается в параметре. Например, если никакие параметры не переданы, он будет знать, чтобы втянуть и отобразить страницу по умолчанию, или если параметр говорит что-то вроде «? P = contact», тогда он отображает страницу контактов.

Идея mod-rewrite работает по-другому и часто используется с шаблоном проектирования модели-представления-контроллера (MVC). Например, на странице контактов сайтов может быть URL:

http://www.mysite.com/infopages/contact

и mod rewrite переведут это на

http://www.mysite.com/index.php?p=contact

MVC является очень кодовым способом разработки веб-сайтов и хорошо работает с более крупными и / или более сложными приложениями. Это немного над вершиной для небольших сайтов.

Конечно, они включают в себя, с некоторой проверкой, но в основном это что-то вроде этого:

 include("content/".$_GET['something'].".php"); 

Вы также можете сделать это, используя «что-то» в качестве ключевого слова базы данных, но большинство index.php? Somthing = где-то, что я видел, включает в себя некоторую проверку работоспособности.

Способ, которым это работает, заключается в том, что приложение больше не записывается как набор страниц, а как монолитное целое, разделенное на несколько файлов. Другими словами, index.php является приложением, и он принимает параметры, чтобы контролировать, какую часть он показывает вам.

Существуют различные способы передачи информации о странице в URL. Использование ссылок на фактические имена файлов не должно быть первым способом, которым вы пытаетесь это сделать. Вместо этого разделите приложение на разные команды и подкоманды. Тогда первые две вещи tht index.php :

  1. Настройка рамок приложения (загрузка общих библиотек, настройка доступа к базе данных и т. Д.)
  2. Выясните, какая команда запрашивается.

Второй – поиск какого-то рода, либо в массив, либо поиск класса или, возможно, файла в определенном каталоге. Как бы то ни было, он должен рассматривать его как ненадежные данные и создавать страницу с ошибкой или страницу по умолчанию с баннером ошибок, если команда недействительна. (Если он будет использоваться в имени файла, убедитесь, что он соответствующим образом преобразован [например .php добавлен] и проверен на любое действие джейлбрейка [например, нет встроенных косых черт]).

Вы смотрите на веб-сайты, созданные с помощью фронтального контроллера.

http://en.wikipedia.org/wiki/Front_controller

Многие популярные PHP-приложения, такие как Joomla, используют его для обработки набора скриптов как связующего приложения.

Передний контроллер является хорошей идеей для таких языков, как PHP, но не забудьте скрыть фронт-контроллер чем-то вроде mod_rewrite, чтобы создать канонизацию URL и оптимизировать читаемость.

Этот тип URL позволяет использовать один файл шаблона, который указывает общую разметку, с включенным фрагментом, который содержит определенный текст. Это включало, что фрагмент может быть фактическим файлом в файловой системе или может быть CLOB в базе данных, причем параметр «страница» дает первичный ключ.

Как отмечали другие люди, прохождение точного пути совсем не безопасно – не делайте этого. В лучшем случае его можно использовать для проверки вашего сайта и получения непубличного контента. В худшем случае он может превратить ваш сайт в невольный прокси для контента, который вы не хотите юридически связать с вами. Где-то между ними он может предоставить хакеру возможность физически вставлять новый контент на ваш сайт.

Более безопасный подход заключается в использовании таблицы базы данных или (для небольших сайтов) таблицы страниц в памяти. Вот код, который я использую для доступа к таблице страниц для моего личного сайта:

 $pageName = (array_key_exists("page", $_GET)) ? $_GET["page"] : null; $currentPage = (array_key_exists($pageName, $pagetab)) ? $pagetab[$pageName] : $pagetab["home"];