Перезапись URL с перенаправлением в один файл - PullRequest
2 голосов
/ 28 марта 2011

Допустим, у меня есть папка проекта следующим образом:

folder/models
folder/view
folder/controls
folder/public
folder/library

Теперь предположим, что папка сайта - folder/public/, и внутри этой папки есть только один файл с именем index.php.Этот файл обрабатывает весь запрос страницы сайта через параметр GET index.php?page=user, например, вызовет файл user.php приложения в другой папке.Дело в том, что мне бы хотелось, чтобы URL, такой как:

www.site.com / index.php? Page = user & id = 1

, стал

www.site.com/user/id/1

Как я могу это сделать?

Ответы [ 6 ]

2 голосов
/ 28 марта 2011

Это взято из CakePHP .htacess правило перезаписи:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

Это сделает все под вашим хостом http://www.site.com/* -> http://www.site.com/index.php?url=*

отсюда ваш index.php может анализировать $ _GET ['url']

//e.g browser requests www.site.com/user/id/1

$url = $_GET['url']; // user/id/1
$params = explode("/",$url); // array(0=>"user",1=>"id",2=>"1")
1 голос
/ 28 марта 2011
RewriteRule ^user/id/([0-9]+)$ index.php?page=user&id=$1

Но мне кажется, что вы должны использовать так называемый роутер, перенаправить весь трафик на index.php ...

http://anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/ (перейдите по этой ссылке)

0 голосов
/ 28 марта 2011

Вы будете реализовывать то, что называется шаблоном Front Controller. Если вы Google, что вы найдете несколько реализаций PHP. Я думал, что эта серия по созданию собственного php-фреймворка хороша.

http://fuelyourcoding.com/php-frameworks-just-roll-your-own-part-1/

0 голосов
/ 28 марта 2011

Без правила перезаписи apache микро фреймворк с именем Slim может выполнять маршрутизацию и создание шаблонов для вашего проекта php.Вы будете определять свои маршруты только в файле index.php.Like;

Slim::get('/', function () {
    Slim::render('index.template');
});
0 голосов
/ 28 марта 2011

Используете ли вы Apache в качестве веб-сервера?

Если да, вы можете использовать * mod_rewrite * для этого.

Я сам этого не делал, поэтому не могу дать вам подробных инструкций, но поиск с помощью google с использованием строки поиска, такой как "mod_rewrite examples", дает вам множество, казалось бы, хороших учебников.

0 голосов
/ 28 марта 2011

В вашем случае нет смысла использовать /id/, но здесь вы идете:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/id/(.*) index.php?page=$1&id=$2

Или как лучше подходить:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php

Затем обработайте запрос в вашем файле index.php, проверив $_SERVER['REQUEST_URI'] по шаблону, который вы придумали.

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