У меня опыт работы с Java, и с любой технологией на основе сервлетов легко сопоставить диапазон URL-адресов (например, /reports/, /безопасный/.do) с указанным сервлетом. Теперь я менее знаком с PHP, но я еще не видел ничего, что делало бы то же самое с PHP (или mod_php). Вполне возможно, что мне не хватает чего-то простого.
Как это сделать в PHP?
Одна из причин, по которой я хочу это сделать, - это «одноразовые» URL-адреса. Теперь это можно сделать с помощью параметров GET (например, хеш-токена MD5), но меня интересует сопоставление URL-адресов как общее решение многих проблем.
Еще одна важная причина использовать что-то подобное - иметь URL-адреса RESTful.






Не может быть сделано в 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
Мне кажется, это хорошо работает.