Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 2

Помимо использования 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/

Ответ 3

Я использую трюк $_ 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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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