php - Codeigniter3 在服务器部署后给出 404(不读取应用程序文件夹)
问题描述
看到了关于这个主题的几个问题,而且似乎都与 .htaccess 相关 - 我在下面粘贴了我的问题。
.htaccess(存储在根 web 文件夹中,在应用程序之上):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png)
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ ./index.php/$1 [L]
</IfModule>
CodeIgniter 配置:
$config['base_url'] = 'https://'.$_SERVER['HTTP_HOST'].'/';
$config['index_page'] = 'index.php';
$config['uri_protocol'] = 'REQUEST_URI';
SSL 证书安装正确且测试良好。还使用 base_url 交换到 http 进行了测试,并为端口 80 设置了 vhost。通配符证书还在没有 codeigniter 的不同子域上进行了测试,按预期工作。
所有返回 404 错误的页面。Apache 访问日志显示不正确的端点被命中;
阿帕奇错误日志:
[core:info] [pid 26683] [client xxxx:53318] AH00128:文件不存在:/var/www/mysite/Account/login
这是不正确的端点 - 这应该是点击 /Application/Account/login 来加载 Account 控制器。这只发生在当前的服务器设置上(标准 LAMP 堆栈上的 Ubuntu 16.04)。
但是,如果我将虚拟主机设置为从 Application 文件夹开始,这显然会导致我丢失 .htaccess、资产、图像等。有人知道为什么 CI 似乎在根目录下寻找控制器吗?
解决方案
确保您的虚拟主机设置正确。错别字对虚拟主机有重大影响,并且控制器的完全错误的位置路径可能表明存在虚拟主机设置问题。
您可以通过在浏览器地址中包含 index.php 来确认 .htaccess 是否正常工作,例如
example.com/index.php/account/login
如果这有效,但当你离开时它没有,index.php
那么要么mod_rewrite
不是“开启”,要么你的虚拟主机被搞砸了。
推荐阅读
- shell - cron 无法在 shell 中运行命令
- java - android中的微调器
- javascript - Rendering nested object
- c# - 请求/响应适用于原语,但不适用于对象
- ansible - 将具有特定文件扩展名的多个文件更改为文件夹中的另一个扩展名
- d3.js - d3 - 堆积条形图,条形不显示
- hyperledger-fabric - 无法在 Hyperledger Composer Rest Api 中的现有 JSON 响应中添加值
- php - 如何在php中将字符串和数组编码为json
- magento - 无法在 magento 2 中重定向到 403 页面
- python - python 正则表达式匹配内容跨越多行