CodeIgniter htaccess和URL重写问题

时间:2013-02-09 00:45:08

标签: php .htaccess codeigniter

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

我从未使用过MVC结构,所以我正在学习,所以请原谅我,如果我做错了。

我正在尝试访问我创建的名为' about_page.php'只需输入 localhost / ci / about ,但目前我只能使用 localhost / ci / index.php / about

来访问它

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

我已经找到了解决这个问题的方法,但是还没找到。这是我已经搜索过的地方:

CodeIgniter - removing index.php
Codeigniter - how to remove the index.php from url?
http://www.farinspace.com/codeigniter-htaccess-file/

CodeIgniter在'应用程序'中附带.htaccess文件。仅包含Allow Deny From All的文件夹。所以我在根目录http://localhost/ci/.htaccess中创建了一个新的.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页面,或者我是否必须创建一个' about' '应用程序中的目录' ?目录

11 个答案:

答案 0 :(得分:72)

要删除index.php,需要执行3个步骤。

  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. 启用重写引擎(如果尚未启用)

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

    a2enmod rewrite
    

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

    将所有AllowOverride None更改为AllowOverride All

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

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

    sudo /etc/init.d/apache2 restart
    

答案 1 :(得分:5)

您的.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”

答案 2 :(得分: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> 

答案 3 :(得分: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";

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

答案 4 :(得分: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个配置文件
  • controller
  • 的.htaccess
  • mod_rewrite的

答案 5 :(得分:1)

如果不能正常工作

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

将其更改为

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

如果不工作,请将其更改为

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

如果使用此

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

使用重定向或标题位置到url不在htaccess中将无法正常工作你必须在htaccess中添加url才能工作

答案 6 :(得分:1)

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

  1. 单击wamp图标(通常为绿色),转到&#34; Apache&#34; &GT; &#34; Apache模块&#34; &GT; &#34; rewrite_module&#34 ;. &#34; rewrite_module&#34;应该勾选!然后就可以了!

答案 7 :(得分: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存档直接解压缩到Web空间。文件夹权限很可能直接从存档中创建。鉴于它们是安全的,但是CodeIgniter手册https://codeigniter.com/user_guide/installation/index.html中未提及文件夹访问问题(在类似Unix的系统上),并且可能会在其中提及有关如何放松CodeIgniter的安全性同时保持安全性的准则。生产系统(如前所述,手册中已经有一些安全提示)。

答案 8 :(得分: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]

答案 9 :(得分:0)

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

leave the .htaccess file in CI root dir

答案 10 :(得分:0)

打开 application / config / config.php 文件并进行以下更改,

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

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

  3. 为空

在项目根文件夹中创建新的 .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]

重新启动服务器,打开项目,一切都会顺利进行。