使用 codeigniter 在 Apache 服务器上出现错误 404

Roy*_*rOn 3 php apache .htaccess mod-rewrite codeigniter

这是我第一次将 codeigniter 项目上传到生产环境,并且从 Apache 服务器收到错误 404。

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

每一篇文章我都看了两天了,还是没找到解决办法。。。。

这是我的设置:

检查 Apache 中的重写模式 - 得到“模块重写已启用” 我的项目位于/var/www/roy/所以 url 是roy.my-domain.com/roy

  1. Apache2.conf

    <Directory /var/www/html/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    </Directory>
    AccessFileName .htaccess
    
    Run Code Online (Sandbox Code Playgroud)
  2. .htaccess

    <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>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 配置文件

    $config['base_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/roy/';
    $config['index_page'] = '';
    
    Run Code Online (Sandbox Code Playgroud)
  4. autoload.php(我正在使用Twig)

    $autoload['libraries'] = array('database','session','twig');
    
    Run Code Online (Sandbox Code Playgroud)
    • 我添加了对日志和缓存目录的权限
  5. 控制器结构

    name Login.php - 
    class Login extends CI_Controller
    
    Run Code Online (Sandbox Code Playgroud)

Mat*_*ter 5

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

3 - 如果不是开发,那么使用$_SERVER['HTTP_HOST']超全局永远不是一个好的实践。可以从客户端更改。只需使用正确的网址即可。

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