在codeigniter中更改网址

PHP*_*MAN 2 php codeigniter

我有一个看起来像的网址

mysite.com/index.php/home/user_get
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

但是我的客户现在希望在网址中有一个hashbang

mysite.com/username
Run Code Online (Sandbox Code Playgroud)

无论如何在代码点火器允许我使用这种类型的网址我登录?

J0H*_*0HN 5

要摆脱index.php前缀,你必须在apache配置文件中启用mod_rewrite并使用htaccess重写url.

要启用mod_rewrite,请打开httpd.conf文件并取消注释以下行

LoadModule rewrite_module modules/mod_rewrite.so
Run Code Online (Sandbox Code Playgroud)

要重写URL,您必须将.htaccess文件(命名为'.htaccess')放入您的站点根目录并向其添加以下行:

RewriteEngine On
RewriteCond $1 !^(index\.php|images|scripts|css|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)

第三行很重要,因为它允许提供静态内容.您必须修改它以匹配您的项目结构.

我认为,依赖用户是不可能的.请参阅mod_rewrite文档以供参考

更新: 如果它只是关于usning mysite.com/username而不是mysite.com/index.php/home/user_get你可以username使用单一方法定义控制器

public function index(){
    redirect('/home/user_get', 'refresh');
}
Run Code Online (Sandbox Code Playgroud)

如果您要支持多个用户,例如mysite.com/john,mysite.com/dave,这可能有所帮助

RewriteEngine On
RewriteCond $1 ^(index\.php|images|scripts|css|robots\.txt)
RewriteRule $1 [L]

RewriteCond $1 !^(products|categories)
RewriteRule ^(.*)$ /index.php/users/$1 [L]

RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)

这会将任何未知'controller'的请求路由到用户控制器.您必须列出所有控制器(products|categories).在用户控制器中,您将使用用户名作为参数,只要您的网址是/ users/username.请注意,这未经过测试.