Переписать URL, чтобы скрыть index.php и сделать запрос красивым - PullRequest
0 голосов
/ 01 октября 2011

Я разработал проект с пользовательской архитектурой MVC. И я новичок в мире Apache, поэтому я был бы признателен за помощь в этом вопросе. В Интернете я нашел много учебных пособий, но никого не интересовали мои интересы.

У меня есть такой URL: http://knjiskicrv.comoj.com/index.php?page=book&id=1

Я хотел бы отображаться так: http://knjiskicrv.comoj.com/book/id/1

Или это: http://knjiskicrv.comoj.com/index.php?page=faq В это: http://knjiskicrv.comoj.com/faq

Если в запросе нет page (http://knjiskicrv.comoj.com/index.php), Я хотел бы показать: http://knjiskicrv.comoj.com/

Также без page в запросе (http://knjiskicrv.comoj.com/index.php?category=2), должно быть так http://knjiskicrv.comoj.com/category/2

Надеюсь, кто-нибудь поможет. Спасибо.

1 Ответ

1 голос
/ 01 октября 2011

На самом деле, ваша проблема состоит из двух шагов.Сначала нужно понять, что такое «Маршрутизация» в MVC.Если у вас есть собственная реализация MVC-подобной платформы и вы не поддерживаете маршрутизацию, то это, вероятно, означает, что вы даже не знали, как она работала раньше.(Грустно, но верно)

В инфраструктуре MVC вы настраиваете маршруты, используя ROUTER, и маршрутизатор анализирует URL-адреса для вас, говоря: ЭЙ, я нашел этот URL-адрес, соответствующий вашему запросу, продолжайте и работайте с ним.

Итак, ваш контроллер получает запрос на маршрутизацию в себя и парсит URL, как он считает нужным.Например, использование explode ('/', $ _SERVER ['REQUEST_URI']) и последующее чтение различных частей URL-адреса для сопоставления с ожидаемыми переменными.

Все это очень теоретически, потому что существует ЗИЛЛОНОВ путиреализовать это по-своему.Единственное, что вам нужно будет использовать - это немного волшебства mod_rewrite, чтобы передать все запросы в ваш index.php, который будет маршрутизировать все.Посмотрите на URL ниже, чтобы узнать о mod_rewrite, это очень сложный предмет:

http://www.addedbytes.com/for-beginners/url-rewriting-for-beginners/

То, к чему я обычно обращаюсь, но у меня нет доступа к нему из дома, это что-то вродеthis:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^assets/
RewriteRule .* index.php

Это перенаправит весь трафик в index.php, и затем вы сможете использовать $ _SERVER ['REQUEST_URI'] для анализа запроса.Все в активах / папках не будут затронуты и будут работать правильно.

Обратите внимание, я собрал эту часть из своей шляпы, она может не работать ...

...