Используйте формат URL SO для $ _GET - PullRequest
1 голос
/ 15 декабря 2010

StackOverflow имеет очень аккуратный, чистый формат URL.Он выглядит так же, как структура каталогов, но здесь не может быть каталога для каждого вопроса!У меня такой вопрос:

Как я могу получить, например, http://www.site.com/sections/tutorials/tutorial1, чтобы оставаться таким же образом в адресной строке, но преобразовать его в $_GET запрос на PHP, чтобы возиться?

Я мог бы использовать .htaccess файл, но я не хочу, чтобы URL был переписан - я бы хотел, чтобы он оставался чистым и дружелюбным.Могу ли я использовать здесь только функции разбиения строк в PHP для получения каких-то притворных данных $_GET?

Спасибо,

Джеймс

Ответы [ 5 ]

1 голос
/ 15 декабря 2010

Как насчет этого, используя .htaccess, чтобы разделить URL-адрес, URL-адрес не изменится, но вместо этого укажите на index.php с различными $_GET переменными, его можно увеличить, чтобы охватить больше разделов URL-адреса.

# turn rewriting on
RewriteEngine on

# get variables in this order, [object], [object,action], [object,action,selection]
RewriteRule ^([^/\.]+)/?$ /index.php?object=$1 [L,NC,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /index.php?object=$1&action=$2 [L,NC,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /index.php?object=$1&action=$2&selection=$3 [L,NC,QSA]
0 голосов
/ 15 декабря 2010

$_GET не содержит компоненты пути из URL, только параметры, которые в конечном итоге следуют за ?.Вы можете использовать

$parts = explode('/', pathinfo($_SERVER['REQUEST_URI'], PATHINFO_DIRNAME));
var_dump($parts);

Однако, похоже, вам нужно прочитать перезапись URL, например, с mod_rewrite.«Я не хочу, чтобы URL был переписан - я бы хотел, чтобы он оставался чистым и дружелюбным» ... Переписывание происходит на сервере.Пользователь никогда не видит «некрасивый» результат.

0 голосов
/ 15 декабря 2010

Если вы не хотите использовать mod rewrite, лучшим решением было бы использование регулярных выражений с переменной $_SERVER['REQUEST_URI'].

т.е.:

preg_match('|/(.*)/(.*)|', $_SERVER['REQUEST_URI'], $match);
$_GET['param1'] = $match[1];
$_GET['param2'] = $match[2];

Если вы хотите настроить скрипт php перехвата всех файлов.То есть, если запрос сценария не существует, используйте сценарий по умолчанию, используйте mod-rewrite, чтобы перенаправить все в один сценарий, т.е. среда Zend (и большая часть среды PHP MVC) использует это:думаю, что это может быть немного громоздко.

0 голосов
/ 15 декабря 2010

Это на самом деле RESTful способ создания вашего URI. Не только ТАК применяет этот шаблон. Я рекомендую не изобретать велосипед, взглянув на этот вопрос.

Кроме того, вы можете переключиться на среду RESTful, такую ​​как CakePHP или CodeIgniter , которые по умолчанию настроены на использование шаблона RESTful.

0 голосов
/ 15 декабря 2010

Фреймворк PHP Rest может сделать это для вас, поэтому я отсылаю вас к этому вопросу . Большинство фреймворков не загружают данные из $_GET, но предлагают аналогичный и одинаково удобный способ их чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...