Может ли PHP 5 выполнять обработку запросов аналогично Tomcat или GAE? - PullRequest
0 голосов
/ 28 октября 2009

допустим, я хочу перейти на

http://example.com/something/a/few/directories/deep

Есть ли способ, которым я могу обработать это в PHP без необходимости создавать эти каталоги? Я просто хочу получить все после доменного имени как переменную и работать оттуда.

Ответы [ 5 ]

2 голосов
/ 28 октября 2009

Конечно. Вам даже не нужно mod_rewrite, если начало является постоянным или имеет только несколько возможных значений. Создайте php-файл с именем something (без расширения) и скажите Apache (через SetHandler или аналогичную директиву) рассматривать его как PHP. Затем изучите $_SERVER['PATH_INFO'] в сценарии, который будет выглядеть как a/few/directories/deep IIRC. Вы можете использовать это для направления вашего запроса, как вам нравится.

В качестве альтернативы. как говорит Мартин, используйте простое правило mod_rewrite, чтобы переписать его в /dispatch.php/something/a/few/directories/deep, и тогда у вас будет весь путь в PATH_INFO.

2 голосов
/ 28 октября 2009

Наиболее распространенный способ сделать это - использовать mod_rewrite. (Там во введении к этому в http://articles.sitepoint.com/article/guide-url-rewriting). Это позволяет вам внутренне сопоставить эти дружественные URL-адреса с параметрами запроса, переданными в ваш PHP-скрипт.

1 голос
/ 28 октября 2009

Если вы используете apache ...

Добавьте правило перезаписи (в файле vhost conf или просто удалите файл .htaccess в корневой каталог вашего документа), чтобы указать все на index.php. Затем внутри вашего index.php проанализируйте uri запроса и извлеките путь

RewriteEngine on
RewriteRule ^.*$ index.php [L,QSA]

index.php:
$ filepath = $ _SERVER ['REQUEST_URI'];
$ filepath = ltrim ($ myname, '/'); // удаляем косую черту, если хотите.

1 голос
/ 28 октября 2009

Вы не нуждаетесь в mod_rewrite для обработки такого сценария. Большинство популярных PHP-фреймворков в настоящее время поддерживают разбор сегментов URI. Это простой пример, который все еще оставляет несколько дыр в безопасности, которые нужно исправить.

Вы можете справиться с этим, взяв одну из глобальных переменных $ _SERVER и разделив ее на прямые косые черты, например:

if (!empty($_SERVER['REQUEST_URI'])) {
    $segments = explode('/', $_SERVER['REQUEST_URI']);
}

Переменная $ сегментов теперь будет содержать массив сегментов для повторения.

0 голосов
/ 28 октября 2009

На самом деле это не вопрос, связанный с PHP5 - перезапись URL-адресов является частью вашего веб-сервера.

Вы можете, когда вы используете mod_rewrite на Apache (не знаю об IIS, но, вероятно, что-то подобное).

...