首页 文章

CodeIgniter htaccess和URL重写问题

提问于
浏览
36

我之前从未使用过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 - removing index.php
Codeigniter - how to remove the index.php from url?
http://www.farinspace.com/codeigniter-htaccess-file/

CodeIgniter在'application'文件夹中附带.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页面,或者我是否必须在'application'目录中创建'about'目录?

10 回答

  • 2

    删除 index.php 有3个步骤 .

    • application/config.php 文件中进行以下更改
    $config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'AUTO';
    
    • 使用以下代码在根目录中创建 .htaccess 文件
    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
    • 启用重写引擎(如果尚未启用)

    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
    
  • 0

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

  • 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>
    
  • 5

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

    • 将.htaccess文件保留在CI根目录中

    • 确保mod_rewrite已打开

    • 检查拼写错误(即控制器文件/类名)

    • 在/application/config/config.php中设置 $config['index_page'] = "";

    • 在/application/config/routes.php中设置 your 默认控制器 $route['default_controller']="home";

    如果您正在运行CI(2.1.3)的干净安装,那么实际上并没有太多错误 .

    • 2个配置文件

    • 控制器

    • .htaccess

    • mod_rewrite

  • 1

    这适合我

    .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";
    

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

  • 1

    如果不工作

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

    改为

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

    如果不工作改变它

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

    如果使用这个

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

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

  • 2

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

    • 单击wamp图标(通常为绿色),转到"Apache"> "Apache modules"> "rewrite_module" . 应该勾选"rewrite_module"!然后就是要走的路!
  • 70

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

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

    然后我达到了apache的错误日志,最后得到了一个有点出乎意料但完全符合逻辑的提示 .

    codeIgniter主文件夹对文件夹没有X权限,呈现Web服务器无法读取的所有内容 .

    chmod ugo x yourCodeIgniterFolder

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

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

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

    然后我开始得到php错误 .

    Culprit与应用程序和系统文件夹中内部文件夹的“其他”权限的主文件夹无X标志相同 .

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

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

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

  • 1

    只需在.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]
    
  • 0

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

    leave the .htaccess file in CI root dir

相关问题