【发布时间】:2026-01-24 19:55:02
【问题描述】:
我无法通过直接链接直接加载 CodeIgniter views 文件夹的子文件夹中的视图。
这是文件夹结构:
my_project/
application/
views/
pages/
about.php
about/
organization.php
history.php
我需要通过以下链接访问organization.php 和history.php:
<div id="container">
<ul>
<li>
<a href='<?php echo base_url('about'); ?>'>About</a>
</li>
<li>
<a href='<?php echo base_url('about/organization'); ?>'>About/Organization</a>
</li>
<li>
<a href='<?php echo base_url('about/history'); ?>'>About/History</a>
</li>
</ul>
</div>
但是我得到了 404。
我的htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /my_project/
# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /my_project/$1$2 [R=301,NE,L]
# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_project/index.php/$1 [L]
</IfModule>
这是我的routes.php,它指向我的默认视图控制器Pages::view(path/to/file):
$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['pages/(:any)/(:any)'] = 'pages/view/$1/$2';
$route['(:any)'] = 'pages/view/$1';
这是我的控制器:
<?php
class Pages extends CI_Controller
{
function __construct()
{
parent::__construct();
}
public function view($page = 'home')
{
if(!file_exists(APPPATH.'views/pages/'.$page.'.php'))
{
show_404();
}
$data['title'] = strtoupper(str_replace(["-", "–"], ' ', $page));
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
}
注意每当我直接使用时
$this->load->view('pages/views/about/organization');
没关系。与打印相同:
file_exists(APPPATH.'views/pages/about/organization.php');
我不知道是什么搞砸了。
我必须为这些子文件夹制作自定义控制器吗?这是我目前能想到的唯一解决方案。
注意我还将这个子文件夹(实际上是整个项目的)权限设置为777,但直接链接仍然不起作用。
注意我现在唯一的解决方案是为每个子文件夹制作单独的控制器,以便查看它们!这真的不可能只用一个控制器吗?
就像 url 模式 my_app/controller/method 是严格的,my_app/folder/view 是不允许的,除非 folder 和 view 分别对应于 controller 和 method?
解决方案
Zeeshandidthat!
珊蒂,你留下来! Thank you。
你是对的,我想要一个通用方法来捕获我所有的静态页面查看请求。我们现在可以关闭这个问题(我将在 20 小时内奖励赏金)。
【问题讨论】:
-
伙计们,我不想为这些子文件夹中的每一个创建多个控制器,请帮助我在心里知道,这可以通过这个控制器实现,也许是我的
htaccess??? -
你的 routes.php 文件写得不好。再次阅读this。 保留的路由必须位于任何通配符或正则表达式路由之前。 而且路由将按照它们定义的顺序运行。较高的路线总是优先于较低的路线。 这意味着如果您有
$route['(:any)'] = 'something/here',它必须位于文件的最后一行。 -
@Tpojka:我听从了你的建议,仍然没有改变。 I get a 404 for the subfolder view
标签: php .htaccess codeigniter view subdirectory