【问题标题】:Codeigniter first attemptCodeigniter 第一次尝试
【发布时间】:2013-07-01 03:34:57
【问题描述】:

我是 MVC 和 Codeigniter 的新手,但我有一些工作虽然不是我想要的,但我想知道是否有人可以帮助我?

我的网站(联赛、球员)在 codeigniter 子目录中有 2 个页面,目前我访问它们的 URL 是“http://www.mydomain.co.uk/codeigniter/index.php/golf”和“http://www.mydomain.co.uk/codeigniter/index.php/players

1) 如何从 URL 中删除 index.php?我试过 $config['index_page'] = '';在 config/config.php 并设置 .htaccess 文件,但没有运气。

2) 我只想将我在 routes.php 中的默认控制器指向高尔夫控制器,并让控制器处理请求的任何页面。

3)我是否正确设置了它,或者如果没有,那么正确的方法是什么?一个控制器好吗?

.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ codeigniter/index.php/$1 [L]

config/routes.php

$route['default_controller'] = 'golf';
$route['players'] = 'golf/players'; <-Don't really want this entry!

config/autoload.php

$autoload['libraries'] = array('database');
$autoload['helper'] = array('url');

controllers/golf.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

  class Golf extends CI_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {
       $this->load->model('league_model');
       $data['league'] = $this->league_model->get_League();
       $data['title'] = 'League Table';

       $this->load->view('templates/header', $data);
       $this->load->view('templates/menu');
       $this->load->view('league', $data);
       $this->load->view('templates/footer');
    }

    public function players() { //Runs because of entry in config/routes.php
        $route['players'] = 'golf/players';
        $data['title'] = 'Players';

        $this->load->view('templates/header', $data);
        $this->load->view('templates/menu');
        $this->load->view('players', $data);
        $this->load->view('templates/footer');
    }

  }

?>

models/league_model.php

<?php

  class League_model extends CI_Model {

    public function __construct() {

    }

    public function get_League() {
      $this->db->from("player");
      $this->db->order_by("name", "asc");
      $query = $this->db->get(); 
      return $query->result_array();
    }

  }

?>

views/league.php

<p><?php echo $title; ?></p>
<?php foreach ($league as $item): ?>
    <p><?php echo $item['name']." : ".$item['handicap']." : ".$item['bbnetbirdie']." : ".$item['bb4p'] ?></p>
<?php endforeach ?>

views/players.php

<p>This is players</p>

【问题讨论】:

    标签: codeigniter codeigniter-routing


    【解决方案1】:

    .htaccess应该是这个样子

    <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase codeigniter/
    
     RewriteCond %{REQUEST_URI} ^system.*
     RewriteRule ^(.*)$ /index.php?/$1 [L]
    
     RewriteCond %{REQUEST_URI} ^application.*
     RewriteRule ^(.*)$ /index.php?/$1 [L]
    
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule ^(.*)$ index.php?/$1 [L]
    </IfModule>
    

    在配置中$config['index_page'] = ''; 这是完美的

    【讨论】:

    • 感谢 dianuj 的帮助。我进行了这些更改并使用 URL mydomain.co.uk/codeigniter/golfmydomain.co.uk/codeigniter/players 并收到错误 404 The requested URL /index.php is not found on this server。有什么想法吗?
    • 我的 .htaccess 中有以下内容:RewriteBase /kt2008/ 和 kt2008 相当于您的 golf 文件夹,因此我会将 golf 添加到您的 RewriteBase。
    • 在我的 .htaccess 中更改了 RewriteBase /codeigniter/,它现在就像一种享受。非常感谢 PmanAce 和 dianuj。节省了很多小时:o)
    • 我希望删除 $route['players'] = 'golf/players';从 config/routes.php 并让默认控制器处理我创建的任何页面,因为目前我必须将我创建的任何新页面添加到 routes.php。确定这是可能的吗?
    【解决方案2】:

    我使用的一个简单的 .htaccess 文件:

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

    在 config.php 文件中,删除对 index.php 的任何引用

    $config['index_page'] = ''
    

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 1970-01-01
      • 2013-10-07
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多