无法从 CodeIgniter URL 中删除 index.php

Posted

技术标签:

【中文标题】无法从 CodeIgniter URL 中删除 index.php【英文标题】:Cannot remove index.php from CodeIgniter URL 【发布时间】:2012-12-27 04:37:15 【问题描述】:

我的目录结构是 /var/www/CI/,所有文件夹,即应用程序,系统,在 CI 文件夹下。在 CI 下创建了一个 .htaccess 文件。

以下是.htacess中的代码。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond $1 !^(index\.php|public|images|robots\.txt|css)
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

仍然 localhost/CI/blog 给出 404 错误。谁能指导一下这条规则哪里错了?

【问题讨论】:

【参考方案1】:

请尝试以下方法

首先,请确保您将配置文件设置为如下所示..

$config['index_page'] = '';

还要确保在 httpd.conf 文件中启用了 mod_rewrite,然后,使用以下代码覆盖位于项目根文件夹而不是应用程序文件夹中的 .htaccess 文件。

RewriteEngine on
RewriteCond $1 !^(index\.php|public|\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?$1

【讨论】:

我已经收到了几个博客和帖子来寻找这个答案,你是唯一一个对我有正确答案并且非常清楚该怎么做的人。非常感谢! 感谢@Travis Michael Heller 感谢@Arnab vai.it 帮助我 我忘记添加 $config['index_page'] = ' '; 感谢您提及“项目根文件夹”。我一直在努力弄清楚这个 .htaccess 文件应该放在哪里。不是只有一个。【参考方案2】:

确保在您的application/config/config.php 文件中设置如下:

$config['index_page'] = '';

也这样做:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond $1 !^CI/(index\.php|public|images|robots\.txt|css)
    RewriteRule ^CI/(.*)$ CI/index.php/$1 [L]
</IfModule>

通常您不会将 CI 放在自己的目录中,而是将 applicationsystem 放在根文件夹中。

【讨论】:

执行了上述操作但仍然无法正常工作。还有其他地方需要配置吗?【参考方案3】:

检查您的 Apache 配置,使其允许覆盖。 如果 AllowOverride 设置为 None,则重写将不适合您。

将以下内容添加到您的 httpd.conf(不是您的 .htaccess)应该可以解决您的问题

<Directory "/">
    AllowOverride All
</Directory>

如果它仍然不起作用,请告诉我。

【讨论】:

如果我错了,请纠正我,但不应该是 httpd.conf 吗?我的 httpd.conf 文件也是空的。 感谢您抽出宝贵时间回答我的问题。我很感激。 对不起,我的错误......它是httpd.conf!我确定了我的答案。我希望这个解决方案有所帮助。【参考方案4】:

这行得通。虽然,请确保您的 mod_rewrite 已启用,

    在 Apache 的安装文件夹内的 C:\wamp\bin\apache\apache2.4.9\conf 文件夹下找到 httpd.conf 文件。 在httpd.conf 文件中找到以下行#LoadModule rewrite_module modules/mod_rewrite.so。您可以通过搜索关键字“mod_rewrite”轻松完成此操作。 去掉行首的##表示该行已被注释。 然后重启apache服务器。 您现在可以在执行phpinfo() 时在加载的模块部分看到mod_rewrite

【讨论】:

【参考方案5】:

使用以下步骤, 1. 在文档根目录 [myroot_folder/.htaccess] 中创建 .htaccess 文件。 2.打开application/config/config.php中的配置文件,执行以下操作

$config['index_page'] = '';

从您的基本网址中删除 index.php 如果是$config['base_url']= 'http://localhost/myroot_folder/index.php'; 将其更改为$config['base_url']= 'http://localhost/myroot_folder/';

现在打开.htaccess 文件并添加以下代码块

DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

【讨论】:

【参考方案6】:

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] 

2) 改变:

 $config['index_page'] = ''; 
 remove index.php present in config.php file

3) 从你的服务器重写

【讨论】:

【参考方案7】:

如果你还没有完成所有工作,但你已经完成了,试试这个:

/etc/apache2/sites-available/default 中的虚拟主机文件中将 AllowOverride None 更改为 AllowOverride All

Details here

【讨论】:

以上是关于无法从 CodeIgniter URL 中删除 index.php的主要内容,如果未能解决你的问题,请参考以下文章

从 URL 中删除 index.php - Codeigniter 2

如何从 Codeigniter 中的 URL 中删除“&per_page=”

如何从Codeigniter中的URL中删除“&per_page =”

Tomcat删除index.php Codeigniter

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

从 url (codeigniter) 中删除 index.php 时 .htaccess 防止显示文件