EC2上的CI对所有请求都给出了404

时间:2014-02-19 15:40:23

标签: php mysql .htaccess codeigniter amazon-ec2

我不知道是否因为我已经写过的$ routes []配置或任何因为简单地在服务器中放置CI而导致欢迎信息正常。这甚至不是.htaccess我导致删除htaccess也导致404任何请求。 我在app文件夹和系统文件夹中有.htaccess

  RewriteEngine On
  RewriteBase /
  RewriteCond $1 ^(application|system|private|logs)
  RewriteRule ^(.*)$ index.php/access_denied/$1 [L]
  RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets|resources|css|js|images)
  RewriteRule ^(.*)$ - [L]
  RewriteRule ^(.*)$ index.php/$1 [L]

根目录中的.htaccess重定向维护索引并允许当前开发文件夹:

 RewriteEngine On
 RewriteCond %{REQUEST_URI} !(index.php|x-folder|ci2) [NC]
 RewriteRule ^ /index.php [L]

我的route.php看起来像这样:

   $route['default_controller'] = 'site/home';
   $route['404_override'] = '';

  /********** *********************Admin routes****************/
  $route['admin']='admin/user/login/' ;
  $route['admin/home']='admin/home' ;
  $route['admin/gallery']='admin/home/gallery' ;
  $route['admin/calendar']='admin/home/calendar' ;

在配置中,我已将重要配置更改为:

  $config['base_url']= 'http://example.com.bd/';
  $config['index_page'] = '';

仅供参考:我在localhost中的应用程序运行正常。 我在EC2(亚马逊)上当前的php版本是5.2.3 - 哪个codeigniter优雅地支持和mysql> 5.5

我真的被困了任何人都可以让我离开这个地狱!?

3 个答案:

答案 0 :(得分:1)

正如Sean默认提到的那样,EC2将AllowOverride设置为None,禁止你的.htaccess运行。我是AMI机器,以下是我从终端开始工作的步骤。

  1. sudo nano /etc/httpd/conf/httpd.conf
  2. 寻找<Directory "/var/www/html">
  3. 编辑&#34; AllowOverride none&#34; to&#34; AllowOverride all&#34;
  4. 按&#34; ctrl + o&#34;,&#34;输入&#34;然后&#34; ctrl + x&#34;退出。
  5. sudo service httpd restart
  6. 希望它有所帮助。

答案 1 :(得分:0)

似乎答案应该是删除配置中的尾随“/”,如

$route['default_controller'] = 'site/home';

并将默认控制器重命名为home.php

我猜htaccess似乎是正确的。应该工作。

删除路由的url值中的所有尾部斜杠。例如$ route ['admin']在登录后有一个斜杠,如“login /”。仅在传递了get变量时才使用它们。例如,

$route['view-page/(:num)'] = "admin/admin/view_page/$1";

您可以将此变量设为

public function view_page(page_number){
    // your super code goes here!
}

这是你想要面对的问题。

----------------------- UPDATE ----------------

确保首先启用mod_rewrite.c

# .htaccess main domain to subdirectory redirect 
# Do not change this line. 
RewriteEngine on 
# Change yourdomain.com to be your main domain. 
RewriteCond %{HTTP_HOST} ^(www.)?yourdomain.com$ 
# Change 'x-folder' to be the directory your codeigniter is residing. 
RewriteCond %{REQUEST_URI} !^/x-folder/ 
# Don't change the following two lines. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Change 'x-folder' to be the directory your codeigniter is residing. 
RewriteRule ^(.*)$ /x-folder/$1  
# Change yourdomain.com to be your domain again. 
# Change 'x-folder' to be the directory you will use for your main domain 
# followed by / then the main file for your site, Ive used index.php. 
RewriteCond %{HTTP_HOST} ^(www.)?yourdomain.com$  
RewriteRule ^(/)?$ x-folder/index.php [L]

把它放在位于/ var / www / html的.htaccess中..让我们试一试

答案 2 :(得分:0)

默认情况下,EC2上的AMI实例将在httpd.conf中的AllowOverride None内设置<Directory "/var/www/html"></Directory>。如果将其更改为AllowOverride All,则允许Apache在CodeIgniter目录中使用.htaccess文件。