我正在为两个应用程序(公共和管理员应用程序)使用CodeIgniter。 文档结构的重要元素是:
/admin
/admin/.htaccess
/admin/index.html
/application
/application/admin
/application/public
/system
.htaccess
index.php
/admin/.htaccess文件如下所示:
DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
/admin/index.php有以下更改:
$system_folder = "../system";
$application_folder = "../application/admin"; (this line exists of course twice)
/application/admin/config/routes.php包含以下内容:
$route['default_controller'] = "welcome";
$route['admin'] = 'welcome';
欢迎是我的默认控制器。
当我调用域/管理员时,我收到404 Page Not Found错误。当我调用Domain / admin / welcome时,一切正常。在调试日志中,我收到以下错误消息:
DEBUG - 2010-09-20 16:27:34 --> Config Class Initialized
DEBUG - 2010-09-20 16:27:34 --> Hooks Class Initialized
DEBUG - 2010-09-20 16:27:34 --> URI Class Initialized
ERROR - 2010-09-20 16:27:34 --> 404 Page Not Found --> admin
奇怪的是,这个设置完全适用于我的本地MAMP安装(使用localdomain / admin /),但是当我在“实时”服务器上发布并测试它时,我只得到404错误。
有什么想法吗?我究竟做错了什么? 谢谢 下进行。
答案 0 :(得分:15)
问题的原因是服务器使用FastCGI运行PHP。
将config.php更改为
后$config['uri_protocol'] = "REQUEST_URI";
一切顺利。
答案 1 :(得分:6)
将此答案留给遇到我情况的其他人。
我的codeigniter应用程序在localhost / WAMP中工作正常,但在推送到AWS EC2实例时无法路由并产生404未找到的错误。我的问题已从HERE htaccess works in localhost but doesn't work in EC2 instance
的答案中解决(路线到我的管理页面) {domain} / admin正在制作404
需要修改/etc/httpd/conf/httpd.conf
文件。
- " DocumentRoot" / var / www / html"" (2个地方)" AllowOverride无"需要更改为" AllowOverride All"。
从AWS仪表板重新启动EC2实例。
{domain} / admin现在可以访问并按预期工作。
希望这有助于其他人喜欢它帮助我!
答案 2 :(得分:6)
您可以尝试两种方法中的一种或两种方式的组合。
我希望这有助于某人
答案 3 :(得分:4)
e.g:
您的控制器名称是YourController
您的网址必须是:
http://example.com/index.php/YourController/method
不是:
答案 4 :(得分:2)
我们必须在服务器端以较小的情况提供控制器名称
$this->class = strtolower(__CLASS__);
答案 5 :(得分:1)
您的文件夹/文件结构对我来说有点奇怪。我无法弄清楚你是如何制定的。
您好我正在为两个应用程序(公共和管理员应用程序)使用CodeIgniter。
这听起来像你有两个单独的CI安装。如果是这种情况,我建议不要这样做。为什么不在管理控制器中处理所有管理员的东西?如果您确实需要两个单独的CI安装,请确保它们绝对是不同的实体,并且两者不会相互冲突。这一行:
$system_folder = "../system";
$application_folder = "../application/admin"; (this line exists of course twice)
你说的这个地方存在(/admin/index.php ...或你的意思是/ admin / application / config?)让我摸不着头脑。你有admin / application / admin和顶层的系统文件夹吗?
答案 6 :(得分:1)
迁移到新环境后我遇到了同样的问题,只是服务器没有运行mod_rewrite
快速sudo systemctl restart apache2
然后<script>
var input_fields = document.getElementsByTagName('input');
for(var i = 0; i < input_fields.length; i++) {
if(input_fields[i].type.toLowerCase() == 'text') {
input_fields[i].setAttribute('pattern', '([a-z]{2}[0-9]{2})');
}
}
</script>
问题解决了......
感谢@fanis在他对这个问题的评论中指出了这一点。
答案 7 :(得分:1)
如果安装了新的Codeigniter,请检查是否在根目录中添加了.htaccess文件。 如果尚未添加,请添加。 您可以将默认内容放在.htaccess文件中,如下所示。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin
ErrorDocument 404 /index.php
</IfModule>
答案 8 :(得分:0)
在我的情况下,我在localhost
上使用它而忘记更改RewriteBase
中的.htaccess
。
答案 9 :(得分:0)
如果您的应用程序位于子文件夹中,则目录和URL中的文件夹名称必须相同(区分大小写)。
答案 10 :(得分:0)
发生这种情况的原因多种多样,但是在扩展控制器时,上面的“ className”缺少答案。
确保您的类名与控制器名相同。例如。, 如果您的控制器名称是Settings.php,则必须像这样扩展控制器。
class Settings extends CI_Controller
{
// some actions like...
public function __construct(){
// and so and so...
}
}
答案 11 :(得分:0)
修改apache配置文件如下:
sudo nano /etc/apache2/apache2.conf
转到第 172 行并更改
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
到
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
然后最后
sudo systemctl restart apache2