Как понять PHP разбора / маршрутизации URL? - PullRequest
1 голос
/ 18 марта 2011

Я только что унаследовал сайт, построенный на PHP.На главной странице www.mysite.com есть href до www.mysite.com / index / 35.html где-то на странице.В корневом каталоге сайта и его дочерних элементах нет документа 35.html.

Число 35 на самом деле является идентификатором, найденным в БД, которая также содержит html-содержимое страницы.

Если я загружаю URL: www.mysite.com/index.php?id=35 загружается та же страница.

Как PHP знает, как автоматически конвертировать

/ index / 35.html

в

/ index.php? id = 35


EDIT На основании ответов я нашел файл .htaccess, содержащий инструкции по перезаписи, которые объясняли бы функциональность.

Однако IIS, похоже, не (или не настроен) не знает, как это использовать.(возможно, потому что это функция Apache?)

Так что возникает вопрос: Есть ли способ настроить IIS для работы с этим?

Ответы [ 4 ]

1 голос
/ 18 марта 2011

это будет сделано с использованием перезаписи URL с использованием .htaccess - должно быть в webroot.

Это может выглядеть примерно так:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

Может иметь другие биты, но в основном это говорит apache - отправлять все, что НЕ существует физически, в index.php

1 голос
/ 18 марта 2011
RewriteEngine On
RewriteRule ^index/([\d]+)\.html /index.php?id=$1 [NC,L]

Это с моей головы. Любые браузеры, пытающиеся загрузить адрес, начинающийся с index / с любым номером, заканчивающимся на .html, будут внутренне перенаправлены на index.php? Id = независимо от того, какой это номер.

Редактировать: Только что увидел, что вы работаете на IIS. Это, вероятно, не будет работать для вас. К сожалению.

1 голос
/ 18 марта 2011

Это не так.Существует правило mod_rewrite , которое переписывает с /index/foo на /index.php?id=foo, либо в файл .htaccess, либо в саму конфигурацию httpd.

0 голосов
/ 18 марта 2011

Я думаю, вы будете использовать .htaccess для перенаправления всех запросов в index.php. Оттуда вы можете передать строку запроса классу маршрутизации, который будет анализировать URL и идентифицировать уникальные идентификаторы. В этом случае мы можем сказать как, ваш класс маршрутизации будет анализировать запрос /index/35.html в indexController, indexAction, id=35. теперь вы можете передать этот идентификатор модели, чтобы получить соответствующее содержимое страницы

NB. Здесь я предполагаю, что вы используете шаблон mvc. В любом случае, к нему можно относиться по-своему, но концепция остается неизменной. Надеюсь, что это имеет смысл.

...