Php CodeIgniter中URL中的控制器重复
我有一个名为Php CodeIgniter中URL中的控制器重复,php,apache,.htaccess,codeigniter,wamp,Php,Apache,.htaccess,Codeigniter,Wamp,我有一个名为Register的控制器,看起来像这样: class Register extends CI_Controller { public function index() { $this->load->view('register'); } public function create() { $this->load->library('form_validation');
Register
的控制器,看起来像这样:
class Register extends CI_Controller
{
public function index()
{
$this->load->view('register');
}
public function create()
{
$this->load->library('form_validation');
//set rules here
if ($this->form_validation->run() == TRUE)
{
//everything checks out
}
else
{
$this->load->view('register');
}
}
}
$config['base_url'] = 'http://example.com';
该视图包含一个发布到注册/创建的表单
我的问题是,当我转到localhost/register
并错误地填写表单时,表单会重新加载,但url现在是:
localhost/register/register/create
如果我再次输入错误
localhost/register/register/register/create
等等
我猜这是一个htaccess
,我试过使用一些在线提供的标准CodeIgniter htaccess文件,但没有一个能解决这个问题。我在WAMP服务器上使用这个
编辑
目前,视图文件仅包含表单。我更喜欢使用直接HTML而不是CodeIgniter表单助手
<form id="register_form" method="post" action="register/create" title="Create an Account">
<!-- input fields -->
</form>
将表单的操作参数从注册/创建
更改为/register/create
。您正在发布到相对URL。通过将斜杠添加到动作参数的开头,可以使URL成为绝对URL。因此,表单将始终发布到http://domain-name/register/create
将表单的操作参数从注册/创建
更改为/register/create
。您正在发布到相对URL。通过将斜杠添加到动作参数的开头,可以使URL成为绝对URL。因此,表单将始终发布到http://domain-name/register/create
使用完整url。在表单的操作中,选择current\u url()
或site\u url('register')
这是一个很好的实践,您可以将这些或preffix与base\u url()
一起使用,因为这样可以让您的站点运行,而不必成为域路径。
例如,如果需要,您可以在example.com/my_site/上运行站点,而不是仅在example.com上运行
为了尽可能完整地控制表单的操作,请始终从http://
开始,并避免使用相对url(例如action=“register”)。使用完整url。在表单的操作中,选择current\u url()
或site\u url('register')
这是一个很好的实践,您可以将这些或preffix与base\u url()
一起使用,因为这样可以让您的站点运行,而不必成为域路径。
例如,如果需要,您可以在example.com/my_site/上运行站点,而不是仅在example.com上运行
为了尽可能全面地控制表单的操作,请始终从http://
开始,并避免使用相对url(例如action=“register”)我也遇到了同样的问题,我可以通过在我的域前面添加基本url“http://”来解决这个问题,如下所示:
class Register extends CI_Controller
{
public function index()
{
$this->load->view('register');
}
public function create()
{
$this->load->library('form_validation');
//set rules here
if ($this->form_validation->run() == TRUE)
{
//everything checks out
}
else
{
$this->load->view('register');
}
}
}
$config['base_url'] = 'http://example.com';
我也遇到了同样的问题,我可以通过在我的域前面添加基本url“http://”来解决它,如下所示:
class Register extends CI_Controller
{
public function index()
{
$this->load->view('register');
}
public function create()
{
$this->load->library('form_validation');
//set rules here
if ($this->form_validation->run() == TRUE)
{
//everything checks out
}
else
{
$this->load->view('register');
}
}
}
$config['base_url'] = 'http://example.com';
在url中添加base\u url()
:
<a href="<?=base_url()?>/mypage">
在url中添加base\u url()
:
<a href="<?=base_url()?>/mypage">
请发布您的视图文件-特别是表单打开部分-听起来您的操作URL是wrong@Ula,Laurencei:我已经发布了上面的视图文件。请发布您的视图文件-特别是表单打开部分-听起来您的操作URL是wrong@Ula,Laurencei:我已经发布了上面的视图文件。嗯,让我试试使用绝对路径是!!非常感谢。这解决了问题。我还遇到了表单验证在example.com/register
上工作的问题,但在example.com/register/
上不起作用。它也解决了这个问题。@Ula:我发现form\u open()
非常不直观,因为这是我第一次使用CI。与手动编写表单标记相比,使用它有什么好处吗?@xbonez来自CI文档:使用此标记而不是硬编码您自己的HTML的主要好处是,它允许您的站点在url发生更改时更易于移植。但是如果您在action=“”中使用base_url()、current_url()或site_url()没关系。嗯,让我试试用绝对路径是的!!非常感谢。这解决了问题。我还遇到了表单验证在example.com/register
上工作的问题,但在example.com/register/
上不起作用。它也解决了这个问题。@Ula:我发现form\u open()
非常不直观,因为这是我第一次使用CI。与手动编写表单标记相比,使用它有什么好处吗?@xbonez来自CI文档:使用此标记而不是硬编码您自己的HTML的主要好处是,它允许您的站点在url发生更改时更易于移植。但是如果您在action=“”中使用base_url()、current_url()或site_url()没关系,这的确是问题所在。我现在正在使用CIsite\uURL
函数来生成绝对路径。这确实是问题所在。我现在使用CIsite\u url
函数来生成绝对路径。