【问题标题】:Error 404 on Apache server with codeigniter带有 codeigniter 的 Apache 服务器上的错误 404
【发布时间】:2017-09-04 01:25:59
【问题描述】:

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

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

每篇文章都看了2天,没找到解决办法....

这是我的设置:

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

  1. Apache2.conf

    <Directory /var/www/html/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    </Directory>
    AccessFileName .htaccess
    
  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>
    
  3. config.php

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

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

    name Login.php - 
    class Login extends CI_Controller
    

【问题讨论】:

  • 您的开发服务器上的路径结构是否相同?澄清一下,roy.my-domain.com/roy 是可公开访问的 URL 吗?
  • w3dk - 是的 - 我确实有相同的路径 - 该项目在开发中运行良好

标签: php apache .htaccess codeigniter mod-rewrite


【解决方案1】:

在您的html 文件夹中创建一个site 文件夹。然后,将您的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

【讨论】:

  • 我很好奇这实际上是如何解决 OP 的问题的?考虑到开发服务器在相同的路径结构下似乎可以正常工作,OP 的配置有什么问题?在#2,您将.htaccess 文件放在哪里?
【解决方案2】:

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

由于您正在使用 路径信息(即 URL 上的 /index.php/&lt;path-info&gt; 来路由请求,AcceptPathInfo 可能在服务器上被禁用。如果它被禁用,那么这样的请求将导致 404。

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

AcceptPathInfo On

【讨论】:

  • w3dk -我试过了 - 仍然 - 错误 404,我现在注意到的另一件事 - 图像未显示 - 它们的路径正常 - config->item('base_url'); ?>public/assets/img/logo.png" alt="">
猜你喜欢
  • 2016-05-10
  • 2019-04-12
  • 1970-01-01
  • 2014-12-26
  • 2016-11-13
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多