【问题标题】:URL routing problem in codeignitercodeigniter中的URL路由问题
【发布时间】:2010-08-06 07:53:14
【问题描述】:

我正在尝试使用 codeigniter URL 路由来路由 URL。 我想重定向一个像

这样的 url
  • /users/edit?email 到 userController/editmail
  • /users/edit?password 到 userController/editpassword

我尝试在配置文件夹的 routes.php 中使用以下行

$route["users/edit?(email|password)"] = "userController/edit$1";

这显示页面未找到。我猜?被视为正则表达式字符。我试图逃避它,但也没有用。

我不想将配置设置 uri_protocol 设置为 PATH_INFO 或 QUERY_STRING,因为这只是我要设置的漂亮 URL,而不是向操作传递任何内容。

有人能帮帮我吗?

问候

【问题讨论】:

    标签: regex codeigniter url-routing


    【解决方案1】:

    您应该像这样逃避?,它应该可以工作。 (未测试)

    $route["users/edit\?(email|password)"] = "userController/edit$1";
    

    稍后编辑

    这按预期工作:

    $route["users/edit(email|password)?"] = "userController/edit$1";
    

    userController 看起来像这样

    <?php
    
    class UserController extends Controller {
    
        function edit()
        {
            echo "general edit";
        }
    
        function editemail()
        {
            echo "edit email!";
        }
    
        function editpassword()
        {
            echo "edit password";
        }
    }
    

    路由器的工作原理是这样的:

    • 如果您转到http://sitename/index.php/users/editemail,您会看到editemail() 操作。
    • 如果您转到http://sitename/index.php/users/editpassword,您会看到editpassword() 操作。
    • 如果您转到http://sitename/index.php/users/edit,您会看到edit() 操作(问号使电子邮件/密码字段成为可选字段,您可以在edit() 操作中执行其他操作

    【讨论】:

    • @Bogdan - 已经尝试过但失败了。想知道这是否与允许的 URL 字符有关,它没有?在它的任何地方。但它没有显示“URI 不允许字符”消息。它显示“找不到页面”。
    • @Bogdan - 我没听懂。你在后来的编辑中写的,不应该适用于users/editemailusers/editpasswordusers/edit 之类的网址吗? URL中的问号在哪里?我在users/edit?password 遇到问题。
    • @Bogdan - 您建议的解决方案需要我更改我的 URL 规范。我很好奇它是否可以在不更改的情况下在 CI 中完成。
    • 你必须找到另一种方法,因为? 不起作用。我查看了~/libraries/Router.php_validate_request() 函数不验证带有? 内部的URL 重写,并且还导致了一个虚假的$segments 数组。您应该尝试使用/ 或任何其他方法,例如我上面描述的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2011-09-23
    • 2015-07-10
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多