【问题标题】:Codeigniter Routing Issues on AWS EC2AWS EC2 上的 Codeigniter 路由问题
【发布时间】:2016-03-11 22:12:03
【问题描述】:

我整天都在 stackoverflow 上搜索这个问题的答案,但我似乎找不到。

我的 Codeigniter 应用程序位于 AWS EC2 服务器上。

这是我的 routes.php:

$route['default_controller'] = 'pages/home';
$route['(:any)'] = 'pages/$1';

编辑这是我当前的 routes.php:

$route['default_controller'] = 'pages/home';
$route['about'] = 'pages/about';
$route['contact'] = 'pages/contact';
$route['home'] = 'pages/home';

这是我的 Pages.php:

class Pages extends CI_Controller {

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

    public function home(){
        $this->view('home');
    }

    public function about(){
        $this->view('about');
    }

    public function contact(){
        $this->view('contact');
    }

    public function view($page)
    {
         if (!file_exists(APPPATH.'/views/pages/'.$page.'.php'))
        {
            // Whoops, we don't have a page for that!
            show_404();
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/footer', $data);
    }

}

这是我的 .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]

我的 config.php:

$config['index_page'] = '';

问题

如果我转到 (my-url),它会使用我的 default_controller。 如果我转到 (my-url)/home 或 /about 或 /contact,我会收到 404 错误。 如果我转到 (my-url)/index.php/home 或 /about 或 /contact,我会得到 default_controller。

我已经仔细检查了 mod_rewrite 是否已安装并启用。我似乎无法弄清楚为什么我什么也没得到。我按照教程阅读了一堆stackoverflow问题和答案以尝试解决它,但无济于事。

请帮忙。

【问题讨论】:

  • 检查RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 而不是RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
  • 您使用的是什么版本的 CI?
  • @wolfgang1983 最近的一个。 3.0.5
  • @Tpojka 也没有用。
  • @J.Han 在该版本的默认控制器路由中不能有子文件夹。您需要有一个合适的 MY_Router.php 来启用该功能,如此处所示。 stackoverflow.com/questions/35620564/…

标签: php .htaccess codeigniter amazon-web-services amazon-ec2


【解决方案1】:

你不能这样使用路由:

$route['(:any)'] = 'pages/$1';

它无法满足您的所有功能需求。

只是建议:

将您的路线用作:

$route['about'] = 'pages/about';
$route['contact'] = 'pages/contact';
$route['view/(:any)'] = 'pages/view/$1';
......

如果您使用(:any) 作为第一个参数,则需要为不同的 URL 提供不同的路由,它不会对所有功能都正常工作。

【讨论】:

  • @j-han 删除这个$route['(:any)'] = 'pages/$1';
  • 现在,我只是把它改成了:$route['about'] = 'pages/about';还是不行
  • 我做了,在单独的测试中:$route['(:any)'] = 'pages/view/$1'; $route['about'] = 'pages/about'; $route['view/(:any)'] = 'pages/view/$1';没有一个有效。
  • @j-han 改变你的 htaccess 而不是使用这些路由
  • @j-han 这会伤害你的所有 URL 删除因此 $route['(:any)'] = 'pages/view/$1';
【解决方案2】:

试试这个

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

【讨论】:

  • 不幸的是,我仍然得到 404
【解决方案3】:

注意使用APPPATH常量时,路径已经以'/'结尾

尝试改变

if (!file_exists(APPPATH.'/views/pages/'.$page.'.php'))

if (!file_exists(APPPATH.'views/pages/'.$page.'.php'))

【讨论】:

  • 这段代码直接来自 Codeigniter 的教程并且一直在工作,所以不幸的是,这不是问题。
  • @J.Han 实际上,@wakeel 是对的。如果您检查index.php 文件,您将看到该常量在末尾用DIRECTORY_SEPARATOR 定义。有趣的事实:我在几个小时前就提议对文档进行更改。
  • 虽然我改变了它,但不幸的是它对我的问题没有任何帮助。在这一点上,我很想忽略 MVC,只将 CI 用于我不必做的其他部分,并使用 GET 函数来浏览页面。
猜你喜欢
  • 2019-06-01
  • 2011-09-16
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多