2012-04-09 2 views
2

мне нужно изменитьИспользуя знак вопроса в CodeIgniter маршрутизации

http://mysite.com/profile?username=nick 

в

http://mysite.com/user/nick 

с маршрутизацией CodeIgniter. Добавить следующую строку в routes.php, но он не работает:

$route['user/(:any)'] = "profile?username=$1"; 

Вот в .htaccess файл, который я использую:

RewriteEngine on 
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 
AddDefaultCharset utf-8 

Как я могу решить эту проблему? Заранее спасибо.

EDIT:

Я имею в виду изменение структуры URL. Таким образом, после маршрутизации он должен перенаправлять

http://mysite.com/user/nick 

к

http://mysite.com/profile?username=nick 

ответ

0

Проблема, скорее всего, является то, что ? специальный символ в языке регулярных выражений значения 1 или 0. Вы должны избегайте его для соответствия, что-то вроде этого должно решить вашу проблему: $route['user/(:any)'] = "profile\?username=$1";

0

Хорошо, вы хотите сделать это наоборот. Попробуйте:

RewriteRule user/([^/?]+) index.php/profile?username=$1 [L] 

Извините, если это не сработает, мой Apache не сотрудничает.

1

правило Htaccess, чтобы справиться с переадресацией:

RewriteRule user/([^/?]+) /profile?username=$1 [L,R=301] 

Route.php изменение:

<?php 
$route['profile'] = 'profile/index'; 

Профиль контроллер:

<?php 
class Profile extends CI_Controller { 

    public function index() 
    { 
     $username = $this->input->get('username'); 
     // do lookup based on username 
    } 
} 

ОДНАКО: этот вид переадресации только имеет смысл, если у вас много которые не имеют смысла меняться. Из вашего вопроса звучит вопрос, что вы можете вводить в заблуждение понятия маршрутизации и перенаправления.


EDIT: Для "маршрута" (а не "переадресовать"), вот шаги:

Htaccess правила для внутренне повторно маршрутизации запросов:

RewriteRule /profile?username=([^&]*) index.php/user/$1 [L] 

маршрута.PHP:

<?php 
$route['user/(:any)'] = 'user/index/$1'; 

Контроллер:

<?php 
class User extends CI_Controller { 
    public function index($username) 
    { 
     // ... 
    } 
} 

Если это не сработает, то, ну, ты делаешь ужасную работу, объясняющую вашу проблему :).

+0

Использование слова «перенаправление», когда вы имеете в виду «маршрут», делает каждый ответ точно противоположным тому, что вы хотите. Я отредактирую его. – landons