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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
19
0
28 169
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

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

Ответ принят как подходящий

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

Помимо использования 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: // вашсайт / сервлет / отчеты / продажи / 2009 вы также можете перейти к форме http: // yoursite / reports / sales / 2009 немного поигрался с .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/

Параметры для 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-module/).

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

Я использую трюк $ _ 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 или что-то подобное.

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

Мне кажется, это хорошо работает.

Другие вопросы по теме