我需要改变
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
我该如何解决这个问题?提前谢谢。
修改
我指的是URL结构的变化。因此,在路由之后,它必须重定向
http://mysite.com/user/nick
到
http://mysite.com/profile?username=nick
答案 0 :(得分: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
}
}
HOWEVER :这种重定向只有在你有很多无法改变的缓存链接时才有意义。从您的问题来看,您可能会混淆路由和重定向的概念。
编辑:要“路由”(而不是“重定向”),请执行以下步骤:
Htaccess规则在内部重新路由请求:
RewriteRule /profile?username=([^&]*) index.php/user/$1 [L]
Route.php:
<?php
$route['user/(:any)'] = 'user/index/$1';
控制器:
<?php
class User extends CI_Controller {
public function index($username)
{
// ...
}
}
如果这不起作用,那么,你正在做一个糟糕的工作来解释你的问题:)。
答案 1 :(得分:0)
问题很可能是?
是正则表达式语言中的特殊字符,意思是1或0.您需要将其转义才能匹配,这样的事情可以解决您的问题:
$route['user/(:any)'] = "profile\?username=$1";
答案 2 :(得分:0)
好的,你想要反过来做。尝试:
RewriteRule user/([^/?]+) index.php/profile?username=$1 [L]
对不起,如果这不起作用,我的Apache不合作。