Codeigniter - 如何从url中删除index.php?

时间:2012-08-14 06:56:53

标签: php codeigniter

我有以下项目结构

/system
/applications
  /cache
  /core
  /helpers
  /hook
  /language
  /libraries
  /logs
  /third_party
  /admin-panel
     /config
     /controllers
        welcome.php
        dashboard.php
     /errors
     /models
     /views
        welcome.php
        dashboard.php
  /user-panel
     /config
     /controllers
            welcome.php
            dashboard.php
     /errors
     /models
     /views
        welcome.php
        dashboard.php
/admin
  index.php
index.php

我的项目文件夹中的index.php将user-panel作为我的应用程序文件夹,admin文件夹中的index.php将admin-panel作为我的应用程序文件夹。

我已插入此行 $ route ['default_controller'] =“welcome”; $ route ['welcome'] ='welcome'; 在users.php中,在user-panel和admin-panel

我可以使用http://localhost/myproject and http://localhost/myproject/admin

访问我的用户面板和管理员面板的欢迎控制器

但我无法使用http://localhost/myproject/dashboard or http://localhost/myproject/admin/dashboard

访问我的信息中心控制台

我可以使用http://localhost/myproject/index.php/dashboard or http://localhost/myproject/admin/index.php/dashboard

访问我的信息中心控制台

但我不希望index.php包含在我的网址中。我想删除它。我也试过在我的管理文件夹中使用.htaccess。我在这个

中写下了这一行
RewriteEngine On
RewriteCond $1 !^(index\.php|(.*)\.swf|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

但这对我不起作用。它给出了404未找到的CI错误。我还通过在httpd.conf中将AllowOerride None更改为AllowOverride All来启用mod_rewrite。请告诉我如何删除index.php以及我应该将.htaccess文件放在项目目录中的哪个位置。

4 个答案:

答案 0 :(得分:10)

如果项目的根文件夹不是域的根目录,即您的网站是域http://localhost/myproject的子目录,那么您的.htaccess文件中需要额外的一行RewriteBase

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

另外请确保您的config.php配置为

$config['base_url'] = 'http://localhost/myproject/';
$config['index_page'] = '';

在apache的配置文件中启用了mod_rewrite。

答案 1 :(得分:2)

从system / application / config目录打开config.php

并替换

$ config ['index_page'] =“index.php”by $ config ['index_page'] =“”

在CodeIgniter目录

的根目录中创建“.htaccess”文件

并添加以下行。

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

在某些情况下,uri_protocol的默认设置无法正常工作。

要解决此问题,请更换

`$config['uri_protocol'] = “AUTO”` 

通过

 $config['uri_protocol'] = “REQUEST_URI” 

from system / application / config / config.php

答案 2 :(得分:1)

请确保以下事项:

  1. .htaccess需要与index.php文件放在同一目录中,通常是应用程序的根目录。
  2. read the manual about codeigniter and .htaccess
  3. 确保apache正在运行名为的重写模块: rewrite_module 您可以在此处阅读有关在Linux上启用模块的更多信息:Blog post或此处的wamp:Wamp icon - > Apache - > Apache模块 - >的 rewrite_module

答案 3 :(得分:0)

查看config.php文件,有一个名为'index_page'

的变量

尝试更改

$config['index_page'] = "index.php";

$config['index_page'] = "";