找不到URL (CodeIgniter应用程序在亚马逊EC2)


URL Not Found (CodeIgniter App on Amazon EC2)

填写并提交此表格后:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>My App</title>   
</head>
<body>
    <?php echo validation_errors(); ?>
    <?php echo form_open('search'); ?>
        <p>
            <input type="input" name="username" placeholder="@UserName" />
            <input type="submit" name="submit" value="Search" />
        </p>        
    </form>    
</body>
</html>
我提交的数据首先被处理,用户应该被重定向到search_page3.php。相反,我得到了这个错误:
未找到

请求的URL/搜索在此服务器上找不到。

Apache/2.2.24 (Amazon) Server at80端口

这是我的控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Search extends CI_Controller {
    public function index()
    {           
        $this->load->helper('form');
        $this->load->library('form_validation');
        // ...
        $this->form_validation->set_rules('username', 'username', 'required');
        $username = $this->input->post('username'); 
        if($this->form_validation->run() === FALSE || $this->val_username($username) === FALSE)
        {
            $this->load->view('search_page2');
        }       
        else
        {   
                    // process this data            
            // ...
            $data['data'] = $data;      
            $this->load->view('search_page3', $data);                       
        }               
    }   
    // additional helper functions 
    // ...
}
/* End of file search.php */
/* Location: ./application/controllers/search.php */

我在这个回答中读到Juan Carlos通过将public_html的AllowOverride设置为All来解决URL问题。只是为了安全起见,我的问题是,我到底如何解决我的错误?

这是我的CodeIgniter application/config/config.php文件的基础url:

$config['base_url'] = 'http://xxx-xx-xxx-xxx-xxx.compute-1.amazonaws.com/';

这是我的httpd.conf从我的EC2实例:

# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories). 
#
# First, we configure the "default" to be a very restrictive set of 
# features.  
#
<Directory />
    Options FollowSymLinks
    AllowOverride None  
</Directory>
#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#
#
这是我的.htaccess文件位于/var/www/html
RewriteEngine On
# Put your installation directory here:
# If your URL is www.example.com/, use /
# If your URL is www.example.com/site_folder/, use /site_folder/
RewriteBase /
# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# For reuests that are not actual files or directories,
# Rewrite to index.php/URL
RewriteRule ^(.*)$ index.php/$1 [PT,L]

http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

如果AllowOverride设置为None,则完全忽略.htaccess文件。因此,index.php将不会被重写。尝试将form_open设置为form_open('index.php/search');来确认。

编辑httpd.conf,将AllowOverride None改为AllowOverride All,重新启动httpd.

另外,仅供参考,您没有重定向到search_page3.php,您正在加载基于一组条件的特定视图。当你说"重定向",我寻找redirect('somepage'); .