无论如何不是一个后端人,但可以通过基础知识导航。我的问题是,我有以下功能,我正在做的福利页面。希望简化子页面而不是创建多个控制器功能和路由重定向。所以我决定将URI作为一个可变路由...不确定这是否是干净的方式(通常我只在通过db动态创建页面时走这条路线)。但它确实有效。
如果我转到website.com/benefits/{section}
,IF会按预期工作。但是,如果我去website.com/benefits/
,我会得到一个404页面 - 显然。我没有什么可以处理这个要求 - 只是因为我不知道如何。如何重定向到主页是用户访问website.com/benefits/
并且没有定义uri(即$ section)?
编辑:或者仅仅创建一个单独的function benefits(){}
函数以及下面的函数是否明智?这是好习惯吗?
控制器功能:
function benefits($section)
{
if($section == 'fitness')
{
echo('fitness page!');
}
elseif($section == 'health')
{
echo('health page!');
}
elseif($section == 'beauty')
{
echo('beauty page!');
}
elseif($section == 'sports')
{
echo('sports page!');
}
else
{
redirect('/');
}
}
答案 0 :(得分:1)
您的重定向似乎正在提供404.如果您想访问/benefits/
,只需设置默认大小写(在您的情况下,为else部分)。
但是看看我做了什么 - 我已经为$ section设置了一个默认值来索引,所以这将表示你的索引页面,使所有未指定的值都重定向:
function benefits($section = 'index')
{
if($section == 'fitness')
{
echo('fitness page!');
}
elseif($section == 'health')
{
echo('health page!');
}
elseif($section == 'beauty')
{
echo('beauty page!');
}
elseif($section == 'sports')
{
echo('sports page!');
}
elseif($section == 'index')
{
echo('benefits index page!');
}
else
{
redirect('/');
}
}
但是,由于问题不是很明确,可能会有另一种解决方案。
确保您的控制器名为“优惠”,并将您的功能重命名为“索引”。 这适用于site.com/benefits等网址。
查看有关使用控制器here的更多信息。
答案 1 :(得分:0)
当您访问 website.com/benefits/
时,您可以尝试此操作(添加默认功能参数值)以重定向到主页:function benefits($section = FALSE) {}
我错过了你必须为此使用路由规则的事实。总之,您希望路由处理2个场景:
1.转到website.com/benefits/{section}
:回复一些事情
2.否则,转到website.com/benefits/
或IFs语句中未定义section
:重定向到主页(website.com/
)
事实上,website.com/benefits/
不是一个单独的案例,它应该属于else
字面上的字面。您只是想正确处理else
案例,但在访问website.com/benefits/
时遇到了错误。如果您不需要,则不想处理index
部分。所以你可能使用了错误的路由规则。
我尝试重现您的问题,如果您使用CodeIgniter指南中的设置,例如$route['benefits/(:any)'] = 'content/benefits/$1';
,您将获得404页面。
以下是针对您的问题的正确路由规则,而不更改benefits
函数的任何内容:
$route['benefits/?(.*)'] = 'content/benefits/$1';
答案 2 :(得分:-1)
这就是你所说的index
功能。 :D,如果function index()
中没有定义action
,则url
是执行的默认函数。没有冒犯,但仍然不确定你在这里做什么。