【问题标题】:Controller repeating in URL in CodeIgniter控制器在 CodeIgniter 中的 URL 中重复
【发布时间】:2012-05-06 08:31:33
【问题描述】:

我有一个名为 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');
        }
    }
}

视图包含一个发送到register/create 的表单。

我的问题是,当我去localhost/register并错误填写表格时,表格会重新加载,但现在的网址是:

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>

【问题讨论】:

  • 请发布您的视图文件 - 特别是表单打开部分 - 听起来您的操作 URL 错误
  • @Ula, Laurencei :我已经在上面发布了视图文件。

标签: php apache .htaccess codeigniter wamp


【解决方案1】:

将表单的操作参数从register/create 更改为/register/create。您正在发布到相对 URL。通过将斜杠添加到 action 参数的开头,您可以使 URL 成为绝对 URL。因此,表单将始终发布到http://domain-name/register/create

【讨论】:

  • 这确实是问题所在。我现在使用 CI site_url 函数来生成绝对路径。
【解决方案2】:

使用完整的网址。 current_url()site_url('register') 在表单的操作中。

您最好使用其中任何一个或使用 base_url() 前缀,因为这样可以让您的网站运行而不必是域路径。
例如,如果需要,您可以在 example.com/my_site/ 上运行该站点,而不是只能在 example.com 上运行。

为了尽可能全面地控制表单的操作,请始终从 http:// 开始并避免使用相对 url(例如 action="register")。

【讨论】:

  • 嗯,我试试用绝对路径
  • 是的!谢谢你。这解决了问题。我还遇到了表单验证在example.com/register 上工作但在example.com/register/ 上工作的问题。它也解决了这个问题。
  • @Ula:我发现form_open() 非常不直观,因为这是我第一次使用 CI。使用它比手动编写表单标签有什么优势吗?
  • @xbonez 来自 CI 文档:使用此标签而不是硬编码您自己的 HTML 的主要好处是,它允许您的网站在您的 URL 发生变化时更加便携。
  • 但是如果你在action=""中使用base_url()、current_url()或者site_url()都没有关系。
【解决方案3】:

我遇到了同样的问题,我可以通过将我的 base_url 放在我的域之前的“http://”来解决它,如下所示:

$config['base_url'] = 'http://example.com';

【讨论】:

    【解决方案4】:

    在您的网址中添加base_url()

    <a href="<?=base_url()?>/mypage">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多