Отображение URL-адресов в PHP?

Я исхожу из фона Java и с помощью любой технологии на основе сервлетов, тривиально сопоставлять диапазон URL-адресов (например, / reports / , / secure / .do) с указанным сервлетом. Теперь я менее знаком с PHP, но я еще не видел ничего, что делает то же самое с PHP (или mod_php). Вполне возможно, что я пропустил что-то простое.

Как вы это делаете в PHP?

Одной из причин, по которой я хочу это сделать, является «одно использование» URL. Теперь это можно сделать с помощью параметров GET (например, MD5-хэш-токен), но меня интересует картирование URL-адресов в качестве общего решения многих проблем.

Еще одна важная причина использовать что-то вроде этого – иметь URL-адреса RESTful.

С помощью Apache вы можете настроить переписывание URL-адресов для ваших php-страниц с помощью mod_rewrite, проверьте эти ресурсы:

  • mod_rewrite: Руководство для начинающих по перезаписи URL-адресов
  • Модуль mod_rewrite
  • Руководство по перезаписи URL

Помимо использования mod_rewrite, как уже сообщалось, вы можете сделать немного магии с помощью простого трюка.

Поместите в .htaccess такую ​​же директиву

<FilesMatch "^servlet$"> ForceType application/x-httpd-php </FilesMatch> 

замените ^ servlet $ регулярным выражением по вашему выбору (это будет имя вашего диспетчера)

Файл-сервлет должен быть похож на этот

 <?php $data = explode('/',$HTTP_SERVER_VARS['PATH_INFO']); // $data[0] always empty $fileToInclude = $data[1].'.php'; if (file_exists($data[1]) { $params=array_slice($data,2); // you can do here something more sophisticated // for example sanitize parameters or assemble // an hash include ($fileToInclude); //Think to this file as a servlet } else { // issue a 404 error, maybe one of the 500 series } ?> 

URL может иметь форму: http: // yoursite / servlet / reports / sales / 2009 вы также можете получить форму http: // yoursite / reports / sales / 2009 plaiyng немного с помощью .htacces и диспетчера.

Этот метод имеет то преимущество, что mod_rewrite не требуется, поскольку FilesMatch (1.3+) и ForceType (2.0+) находятся в ядре apache

См. Ссылку
http://httpd.apache.org/docs/2.2/mod/core.html#forcetype
http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch
http://www.devarticles.com/c/a/Apache/Using-ForceType-For-Nicer-Page-URLs/1/

Трюк, который я использую, это $ _ SERVER ['PATH_INFO'] (я думаю, вам нужен Apache). Это дает вам всю информацию после расширения файла PHP.

 http://www.example.com/page.php/rest/url 

$ _ SERVER ['PATH_INFO'] будет содержать:

 "/rest/url" 

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

Это хорошо, если у вас нет доступа к конфигурациям Apache или .HTACCESS. Также, если что-то изменится, вы можете сделать page.php имя каталога для статического размещения файлов. О, и PHP не нужно иметь расширение .php. Я использовал .api или somesuch в прошлом.

 http://www.example.com/worker.api/rest/url 

Кажется, это хорошо работает для меня.

Не может быть сделано в PHP как таковой. Обратите внимание, что в Java это не Сервлеты, которые отображают URL-адреса, но это конфигурация контейнера сервлета (например, Tomcat).

Вы можете добиться аналогичных результатов для приложений PHP с помощью перезаписи URL.

Параметры для HTTP-серверов, отличных от Apache:

Если вы используете Lighttpd, то их модуль mod_rewrite имеет совершенно другой синтаксис конфигурации. Подробнее см. http://redmine.lighttpd.net/wiki/1/Docs:ModRewrite .

Если вы используете IIS, вам понадобится ISAPI_Rewrite ( http://www.isapirewrite.com/ ) или модуль перезаписи URL ( http://learn.iis.net/page.aspx/460/using-url-rewrite- модуль / ).

Как уже упоминалось, вы можете использовать mod_rewrite для этого, но также можете использовать шаблон дизайна переднего контроллера, который используется многими веб-фреймворками. Взгляните на маршруты Орды или Zend_Controller_Router_Rewrite, которые можно использовать для MVC,

Это похоже на то, что mod_rewrite обычно используется (как часть Apache, а не PHP). Я ничего не слышал о PHP, который бы это сделал.