2013-11-12 3 views
3

Я строй простой структуры MVC, мое намерение состоит в том, чтобы также иметь простые URL (без файла и расширения .php), основные правила:Basic MVC структура, минимизация URL и GET

  • Все проходит через index.php
  • /index.php/1/2 будет типичная URL-, 1-загружает класс контроллера (если такой существует контроллер), 2-вызовы методов (если такой способ существует)

Вот как я прячусь index.php из моих URL-адресов на файл Htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

Это позволяет мне делать /1/2

Чтобы определить свой URL в PHP, я:

$url_parts = array_filter(explode("/", $_SERVER["REQUEST_URI"])); 

Это дает я получаю доступ ко всем URL-адресам ny, я загружаю разные файлы в зависимости от $ url_parts [0] (контроллер) и $ url_parts [1] (метод/функция)

Только я есть одна забота сейчас, и что работает с $ _GET на моих страницах, если я достигаю что-то вроде:

/1/2?foo=bar 

My $ _GET возвращается:

Array ([/1/2] =>) 

В то время как я, очевидно, хотят, чтобы это было :

Array ([foo] => bar) 

Может ли мой код вообще быть спасен? Я, очевидно, не знаю, как работает $ _GET, я ожидал, что это сработает.

ответ

3

Посмотрите на флаг QSA (добавление строки запроса), например.

RewriteRule ^(.*)$ /index.php?/$1 [L,QSA] 
+0

Хороший материал! Это хорошо работает, только недостатком является то, что/1/2 все еще находится на $ _GET, но я думаю, что это «недостаток» моей реализации. –

Смежные вопросы