2011-02-03 2 views
2

В настоящее время я запускаю сайт, на котором я хочу дать людям возможность создавать свои собственные URL-адреса. Например, вот мой URL: http://www.hikingsanfrancisco.com/hiker_community/hiker_public_profile.php?community_member_id=2Создание URL-адресов тщеславия

Понимаете, это называется просто id, что неинтересно, а также плохо для SEO (не это важно здесь).

В идеале, я хочу, чтобы мои участники сайта также имели свои имена в URL-адресе. Как это обычно делается? Так что в моем случае это было бы примерно так: http://www.hikingsanfrancisco.com/alex-genadinik и иметь скрытый идентификатор.

Возможно ли это? Любой совет будет принят во внимание!

Спасибо, Alex

ответ

3

вам нужен маршрутизатор, см https://stackoverflow.com/questions/115629/simplest-php-routing-framework

+0

Я думаю, что в этой теме они слишком усложняют ситуацию. Что делать, если вы можете просто поместить URL-адрес тщеславия в базу данных как одно из полей для этого объекта. Вы все равно будете извлекать вещи из db, так что вы можете получить URL-адрес тщеславия и перенаправить туда. Как вы думаете? – Genadinik

+0

существует множество способов скинуть кошки из базы данных и вернуть тщеславный URL-адрес, это базовый маршрутизатор, фреймворки сложны, вам просто нужно знать, как они работают и использовать полный или частичный, чтобы получить работу - ваша работа – bensiu

2

Code Igniter является большой рамкой MVC, которая обеспечивает конфигурацию полученных маршруты, которые могут быть легко настроены для отправки всех запросов через общий контроллер, где контент можно динамически вытащить из базы данных и отобразить.

Вот пример базового правила маршрутизации, исключающего запрос для пользователей, студентов и уроков, но направляет все остальные запросы в общий контроллер контента.

Так что, если вы запрашиваете http://mydomain.com/hiking-and-camping-info, URL-адрес будет обработан, и туризм-и кемпинг-инфо смотрелся бы в базе данных и связанный контент снесен.

Конфигурация маршрутизации:

$route['^(?!lessons|students|users|content).*'] = 'content'; 

, а затем контроллер содержание захватывает сегмент URL-адрес и находит содержание согласования и загружает его:

class Content extends Controller { 

    function __construct() { 
     parent::Controller(); 
     $this->load->model('Content_model', 'content'); 
    } 

    function index() { 
     $content_url = $this->uri->segment(1); 
     $data['content'] = $this->content->get_content_by_name($content_url); 
     $this->load->view('content', $data); 
    } 
} 
2

Обычно это достигается с помощью использования файла Htaccess на сервере с mod_rewrite (большинство серверов Linux). Примером может быть, как:

Options -Indexes 
RewriteEngine On 
RewriteRule ^([0-9a-zA-Z\-]+)$ $1.php 
RewriteRule ^/(alex[\-]genadinik)$ /hiker_community/hiker_public_profile.php?  community_member_name=$1 

Это означает, что ваш hiker_public_profile.php скрипт нужно будет принимать «АЛЕКС-genadinik», как $ _GET переменную «community_member_name», а затем запрос к базе данных через имя вместо идентификатора ,

Итак, вы должны взять вышеуказанный код, сохранить его в файле под названием «.htaccess», а затем загрузить его в корневой каталог вашего сайта. Рекомендуется использовать регулярные выражения.

+0

Один большой недостаток - нужно иметь правила для всех «hikers» – bensiu

+1

Хотя это действительная точка, это не обязательно так. Вы можете указать все строки на «parser.php» или что-то еще, а затем проверить parser.php, чтобы увидеть, соответствует ли данная строка имени хоккея и выводит страницу hiker. Если это не соответствует имени хоккея, возможно, ищите это имя +.php и загрузить его. Однако это будет медленным. Лично я бы изменил страницу на: http://www.hikingsanfrancisco.com/users/alex-genadinik, а затем сопоставить любую строку после/users/на странице, чтобы загрузить профиль hiker. Тогда вам понадобится только одно правило. –

+0

Это правда - это решение называется маршрутизатором – bensiu

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