2013-07-11 5 views
0

Я довольно новичок в CI и пытаюсь создать чистый URL. Я выполнил эту задачу раньше, не используя фреймворк, отредактировав файл .htaccess следующим образом.Довольно URL с CodeIgniter

RewriteCond %{REQUEST_URI} !^/(css|js|img)/ 
RewriteRule ^profile/([^/]*)$ profile.php?id=$1 [L] 

С CI, я попытался следующие:

#Get rid of the index.php that's in the URL by default 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 

# Profile page 
RewriteCond %{REQUEST_URI} !^/(css|js|img)/ 
RewriteRule ^profile/([^/]*)$ profile?id=$1 [L] 

Я знаю, что по умолчанию значение после того, как имя контроллера в URL (в данном случае контроллер Profile), будет вызывать функцию с тем же именем внутри класса контроллера. Но, если в URL-адресе, указанном после контроллера, нет значения, по умолчанию будет активирована функция индекса. Я планирую оставить имя функции пустым, чтобы по умолчанию была вызвана функция индекса. Но правило перезаписи не работает.

Любые идеи?

+0

Просто используйте маршруты CI для обработки структуры URL-адреса профиля. –

ответ

1

С .htaccess вы можете сделать, как этот

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

# Profile page 
RewriteCond %{REQUEST_URI} !^/(css|js|img)/ 
RewriteRule ^profile/([^/]*)$ profile/index/$1 [L] 

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

То же, вы можете использовать CI маршрутизации routes.php

$route['profile/(:any)'] = "profile/index/$1"; 

Теперь в функции индекса профиля вы можете получить параметр

function index($id) { 
echo $id; 
echo $this->uri->segment(3); 
//Both will result the same 
} 
+0

Это хорошо работает. Но, когда я пытаюсь расширить это, добавив вторую переменную, используя $ route ['users/(: num)/(: num)'] = "users/index/$ 1/$ 2"; в файле routes.php он не работает, когда вторая переменная отсутствует в URL-адресе. Переменная $ 2 является необязательной. Этого не должно быть. Но если он находится в URL-адресе, он должен работать. – Lance

+0

Так перепишите оба маршрута в route.php сначала с одним параметром, а затем для других –

+0

Спасибо! Работает очень хорошо! – Lance

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