Я исхожу из фона Java и с помощью любой технологии на основе сервлетов, тривиально сопоставлять диапазон URL-адресов (например, / reports / , / secure / .do) с указанным сервлетом. Теперь я менее знаком с PHP, но я еще не видел ничего, что делает то же самое с PHP (или mod_php). Вполне возможно, что я пропустил что-то простое.
Как вы это делаете в PHP?
Одной из причин, по которой я хочу это сделать, является «одно использование» URL. Теперь это можно сделать с помощью параметров GET (например, MD5-хэш-токен), но меня интересует картирование URL-адресов в качестве общего решения многих проблем.
Еще одна важная причина использовать что-то вроде этого – иметь URL-адреса RESTful.
С помощью 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: // 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, который бы это сделал.