Ответ 1
С помощью Apache вы можете настроить переписывание URL-адресов для ваших php-страниц с помощью mod_rewrite, проверьте эти ресурсы:
Я исхожу из фона 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.
Это похоже на то, что mod_rewrite обычно будет использоваться (как часть Apache, а не PHP). Я ничего не слышал о PHP, который бы это сделал.
Параметры для 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,