44

我以前从未使用过 CodeIgniter,更不用说任何 php 框架了,我想我会尝试一下。一切都很好,除了我似乎无法从 URL 中删除 index.php 并仍然访问我的页面。

我从来没有使用过 MVC 结构,所以我边走边学,如果我做错了,请原谅我。

我试图通过简单地输入localhost/ci/about来访问我创建的名为“about_page.php”的视图,但目前我只能使用localhost/ci/index.php/about来访问它

页面的控制器是:/application/controllers/about.php
页面 的模型是:/application/models/about_model.php
页面 的视图是:/application/views/about_page.php

我一直在寻找解决此问题的方法,但一直找不到。这是我已经搜索过的地方:

CodeIgniter - 删除 index.php
Codeigniter - 如何从 url 中删除 index.php?
http://www.farinspace.com/codeigniter-htaccess-file/

CodeIgniter 在“应用程序”文件夹中带有一个 .htaccess 文件,其中仅包含Allow Deny From All. 所以我在根目录中创建了一个新的 .htaccess 文件,http://localhost/ci/.htaccess并将这段代码添加到其中:

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

当 .htaccess 文件位于根目录中时,我收到 500 内部服务器错误。当我将完全相同的文件复制到应用程序文件夹中时,500 错误消失了,但我仍然无法使用localhost/ci/about访问 about 页面

我已经更改$config['index_page'] = 'index.php';$config['index_page'] = '';并且我尝试更改$config['uri_protocol'] = 'AUTO';$config['uri_protocol'] = 'REQUEST_URI';但我仍然收到内部服务器错误。

我进入了 httpd.conf 文件并取消了 mod_rewrite.so 模块的注释,所以我知道 mod_rewrite 处于活动状态。

有谁知道为什么这不起作用或我如何才能完成这项工作?我知道 StackOverflow 上有很多关于这个主题的问题,但我找不到能回答我问题的问题。

我这样做对吗?我是否应该能够通过访问localhost/ci/about来访问 about 页面,还是必须在“application”目录中创建一个“about”目录?

4

11 回答 11

88

删除 有 3 个步骤index.php

  1. application/config.php在文件中进行以下更改

    $config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'AUTO';
    
  2. .htaccess使用以下代码在根目录中创建文件

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
  3. 启用重写引擎(如果尚未启用)

    一世。首先,使用以下命令启动它:

    a2enmod rewrite
    

    ii. 编辑文件/etc/apache2/sites-enabled/000-default

    全部更改AllowOverride NoneAllowOverride All.

    注意:在最新版本中,您需要更改/etc/apache2/apache2.conf文件

    iii. 使用以下命令重新启动服务器:

    sudo /etc/init.d/apache2 restart
    
于 2013-02-11T07:12:41.503 回答
8

.htaccess的有点不对劲。看看我的:

 RewriteEngine On
 RewriteBase /codeigniter  

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
  RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]

注意两个地方的“codeigniter”。

之后,在您的配置中:

base_url = "http://localhost/codeigniter"
index = ""

在适当的地方将 codeigniter 更改为“ci”

于 2013-02-09T01:39:21.207 回答
4
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /dmizone_bkp
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
   RewriteRule ^(.*)$ /dmizone_bkp/index.php?/$1 [L]
</IfModule> 
于 2014-03-18T06:13:12.693 回答
3

这对我有用

将您的.htaccess文件移动到根文件夹(在我的情况下位于应用程序文件夹之前)

RewriteEngine on
RewriteBase /yourProjectFolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

我的 config.php 看起来像这样(application/config/ config.php

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

让我知道它是否也适合你们!干杯!

于 2015-04-26T08:12:35.733 回答
2

我正在使用这样的东西 - codeigniter-htaccess-file,这是一篇很好的文章。

  • 将 .htaccess 文件留在 CI 根目录中
  • 确保 mod_rewrite 开启
  • 检查拼写错误(即控制器文件/类名)
  • 在 /application/config/config.php 中设置$config['index_page'] = "";
  • 在 /application/config/routes.php 中设置您的默认控制器$route['default_controller']="home";

如果您正在运行 CI (2.1.3) 的全新安装,那么实际上并没有太多可能出错的地方。

  • 2个配置文件
  • 控制器
  • .htaccess
  • mod_rewrite

于 2013-02-09T02:49:32.910 回答
2

对于那些使用 wamp 服务器的用户,请按照@Raul Chipad 解决方案的前两个步骤进行操作:

  1. 单击 wamp 图标(通常为绿色),转到“Apache”>“Apache 模块”>“rewrite_module”。应该勾选“rewrite_module”!然后就是要走的路!
于 2015-05-29T04:42:12.427 回答
1

如果不工作

$config['uri_protocol'] = 'AUTO';

将其更改为

$config['uri_protocol'] = 'PATH_INFO';

如果不起作用,请将其更改为

$config['uri_protocol'] = 'QUERY_STRING';

如果使用这个

$config['uri_protocol'] = 'ORIG_PATH_INFO';

重定向或标头位置到不在 htaccess 中的 url 将不起作用,您必须在 htaccess 中添加 url 才能工作

于 2013-05-16T08:34:13.540 回答
1

我在 Linux Ubuntu 14 上遇到了类似的问题。

在浏览器中不断出现 403 错误消息并在此处阅读所有答案后,我无法弄清楚出了什么问题。

然后我找到了 apache 的错误日志,最后得到了一个有点意外但完全合乎逻辑的提示。

codeIgniter 主文件夹对文件夹没有 X 权限,从而使 Web 服务器无法读取其他所有内容。

chmod ugo+x yourCodeIgniterFolder

修复了第一个问题。杀死 403 错误。

但后来我开始收到错误 500。

罪魁祸首是 .htaccess 中的错误设置行

然后我开始收到php错误。

罪魁祸首与应用程序和系统文件夹中的内部文件夹的“其他”权限的主文件夹没有 X 标志相同。

我对这个问题的两分钱:阅读 Apache Error.log。

但是,也要注意安全问题。CodeIgniter 建议将应用程序和系统文件夹移出 web 空间,因此如果这些文件夹保留在 web 空间中,则应非常小心地更改权限。

这里值得一提的另一件事是,我已将下载的 CodeIgniter 存档直接解压缩到网络空间。文件夹权限可能是直接从存档中创建的。鉴于它们是安全的,但 CodeIgniter 手册https://codeigniter.com/user_guide/installation/index.html中没有提到文件夹访问问题(在类似 unix 的系统上) ,也许应该在其中提到如何放松的指南CodeIgniter 工作的安全性,同时保持生产系统的安全性(如前所述,手册中已经存在一些安全提示)。

于 2018-06-20T22:10:45.370 回答
0

只需将其添加到 .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]
于 2017-06-07T14:28:31.700 回答
0

默认情况下,以下内容位于application文件夹中,按照建议将其移动到根目录中。

leave the .htaccess file in CI root dir

于 2018-01-15T16:22:07.470 回答
0

打开application/config/config.php文件并进行下面给出的更改,

  1. $config['base_url']通过替换, 的值来设置您的基本网址$config['base_url'] = 'http://localhost/YOUR_PROJECT_DIR_NAME';

  2. 使$config['index_page']配置为空$config['index_page'] = '';

在项目根文件夹中 创建新的.htaccess文件并使用给定的设置, RewriteEngine on RewriteCond $1 !^(index\.php|resources|assets|images|js|css|uploads|favicon.png|favicon.ico|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA]

重启服务器,打开项目,一切顺利。

于 2019-11-05T04:46:50.753 回答