ПОЛУЧИТЬ переменные и красивые URL - PullRequest
1 голос
/ 11 марта 2010

я думаю, что это немного нубский вопрос, но здесь идет.

Я пытаюсь лучше понять переменные $ _GET в PHP. Многие CMS и т. Д. Преобразуют такие вещи, как site.com/?ID=42 в нечто вроде site.com/42*1003

Мой вопрос: что происходит с переменными $ _GET, когда это происходит? Я пытаюсь напечатать массив GET при загрузке страницы, и он пуст.

Ответы [ 4 ]

3 голосов
/ 11 марта 2010

То, как они это делают, использует mod_rewrite

По сути, у вас есть веб-сервер, который «переписывает» URI-запросы на что-то другое, поэтому у вас есть входящие запросы, такие как

http://your.site.com/Page/arg1/arg2/arg3

Но с вашим правилом REWRITE вы получите запросы Apache, которые соответствуют этому шаблону (все запросы связаны для / Page) в:

http://your.site.com/Page?a=arg1&b=arg2&c=arg3

После этого в PHP наконец-то будут установлены значения $ _GET ['a'], $ _GET ['b'] и $ _GET ['c'].

Проверьте эту книгу

1 голос
/ 11 марта 2010

Дело в том, что это больше не переменная GET, переменная просто становится частью URL. Эти URL-адреса затем анализируются приложением. Большинство платформ MVC следуют правилу /controller/action/params и разбивают URL на основе позиции детали:

  • Первая /controller часть определяет, какой контроллер использовать
  • Вторая /action часть определяет, какой метод вызывать
  • Любой следующий параметр просто передается в качестве аргумента принимающей функции, значение зависит от функции и порядка
  • Некоторые также используют именованные параметры, такие как /page:2, поэтому они не должны зависеть от правильного порядка

Это все можно настроить. Вы также можете использовать свой веб-сервер (например, Apache), чтобы переписать эти типы URL-адресов в старые добрые URL-адреса параметров GET, прежде чем они попадут в ваше приложение.

1 голос
/ 11 марта 2010

Вы можете сделать что-то вроде site.com/42 и сохранить переменную GET с ID = 42, добавив правильное правило перезаписи. Например, если вы используете веб-сервер Apache, вы можете изменить файл .htaccess (расположенный в каталоге webroot) следующим образом:

RewriteEngine On
RewriteRule ^(.*) /?id=$1 [L]
1 голос
/ 11 марта 2010

Если вы передадите аргументы таким образом, они больше не будут переменными GET, поскольку они не передаются с использованием традиционного синтаксиса ? GET. Они являются лишь частью URL, который будет проанализирован используемой вами платформой CMS.

Однако, если вы передали «традиционную» переменную GET и хотите прочитать ее на сервере, вам придется обратиться к документации CMS. Если фреймворк будет использовать красивые URL, он, вероятно, также удалит все переменные GET, так как они больше не нужны. Например, платформа CodeIgniter MVC (не сама по себе CMS, но может использоваться для их создания) делает это.

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