Мне очень тяжело ловить голову, используя URL-адреса REST-стиля. Могу ли я немного помочь с этим? Прямо сейчас у меня есть строка запроса, например:
example.com/calendar_expanded?date=1270094400
У меня есть mod rewrite, который скрывает расширение .php. Как мне
calendar_expanded/date/1270094400
. $_GET
значения из URL после факта? Я обожаю концепцию, но рабочие 16-часовые дни, чтобы соответствовать сроку на целый месяц, сказываются на моем мозгу.
Спасибо за помощь.
Если вы хотите создать довольно много URL-адресов REST, вы должны рассмотреть возможность использования фреймворка PHP, который использует шаблон дизайна Front Controller .
Таким образом, каждый запрос обрабатывается каркасом, и вы гибки в разработке своих URL-адресов, однако они должны выглядеть.
Например, Symfony поддерживает дизайн RESTful из коробки.
URL-адреса BTW RESTful имеют смысл только в том случае, если параметры как-то исправлены и указывают ресурс, например заголовок сообщения в блоге. Если вы хотите передать параметр только для того, чтобы, например, управлять сортировкой таблицы (т. Е. Представлением чего-то), тогда это должно быть как «нормальный» параметр GET в строке запроса.
В вашем случае похоже, что вы хотите контролировать, какой день должен отображаться в календаре. Я лично просто использовал бы обычную строку запроса GET.
Вам нужно проверить $_SERVER[ 'REQUEST_URI' ]
или $_SERVER[ 'PATH_INFO' ]
, а не $_GET
.
$_SERVER[ 'REQUEST_URI' ]
будет содержать этот /calendar_expanded/date/1270094400?quertStringParams=1&etc...
$_SERVER[ 'PATH_INFO' ]
будет удерживать это /calendar_expanded/date/1270094400
Другими словами, вам придется разбить эти значения на свои отдельные сегменты, используя explode()
и подобные. Я предлагаю вам использовать $_SERVER[ 'PATH_INFO' ]
как тему, так как реальные переменные строки запроса будут доступны уже в $_GET
.
Это то, что вы ищете?
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ calendar_expanded.php?url=$1 [QSA,L] </IfModule>
Это то, что я помню, когда CakePHP делал, когда он впервые появился … dunno, если он все еще делает …