带有codeigniter的Apache服务器上的错误404

时间:2017-04-08 18:25:47

标签: php apache .htaccess codeigniter mod-rewrite

这是我第一次将codeigniter项目上传到制作中,并且我从Apache服务器收到错误404。

错误: 未找到 在此服务器上找不到请求的URL /index.php。 roy.my-domain.com上的Apache / 2.4.18(Ubuntu)服务器端口80

我已经阅读了每篇文章2天,但没有找到解决方案......

所以这是我的设置:

检查Apache中的重写模式 - 获得“模块重写已启用” 我的项目位于 / var / www / roy / ,因此网址为 roy.my-domain.com/roy

  1. Apache2.conf

    O(n log n)
  2. 的.htaccess

    <Directory /var/www/html/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    </Directory>
    AccessFileName .htaccess
    
  3. 的config.php

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /roy/
    RewriteRule ^([a-z0-9_-]+)\.html$ index.php/page/$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|asset|robots\.txt)
    RewriteRule ^(.*)$ index.php/$1 [L]
    </IfModule>
    
  4. autoload.php(我正在使用Twig)

    $config['base_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/roy/';
    $config['index_page'] = '';
    
    • 我添加了日志和缓存目录的权限
  5. 控制器结构

    $autoload['libraries'] = array('database','session','twig');
    

2 个答案:

答案 0 :(得分:2)

site个文件夹中创建一个html文件夹。然后,将您的roy网站放在那里。然后,我会这样做:

1 - apache2 / sites-enabled / roy.my-domain.com.conf

<VirtualHost roy.my-domain.com:80>
    DocumentRoot /var/www/html/site
    ServerName roy.my-domain.com
    <Directory /var/www/html/site>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

2 - .htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

3 - 如果不是开发,使用$_SERVER['HTTP_HOST']超全局绝不是一个好习惯。可以从客户端更改。只需使用正确的网址。

完成所有操作后,重新启动apache。在Ubuntu中是:$ sudo service apache2 restart

答案 1 :(得分:0)

我假设您的.htaccess文件位于/roy子目录中?

由于您正在使用URL上的路径信息(即/index.php/<path-info>)来路由请求,因此可能在服务器上禁用了AcceptPathInfo。如果是禁用然后这样的请求将导致404。

因此,请尝试在.htaccess文件的顶部启用此功能:

AcceptPathInfo On