Case Insensitive Routing in CodeIgniter

前端 未结 8 950
南笙
南笙 2021-01-13 21:46

I\'ve written this in the CodeIgniter\'s routers.

$route[\'companyname\'] = \"/profile/1\";

This is working fine but when I type \"CompanyN

相关标签:
8条回答
  • 2021-01-13 22:01

    Uhm, well, an dirty but straight to the point way would be to make a small hack to the core Uri class. Open the uri.php file inside system/core/ , scroll to line 269 where you have the method _explode_segments() and make them lowercase. Bad method, but should work.

    function _explode_segments()
    {
        foreach (explode("/", preg_replace("|/*(.+?)/*$|", "\\1", $this->uri_string)) as $val)
        {
            // Filter segments for security
            $val = trim($this->_filter_uri($val));
    
            if ($val != '')
            {
                        // $this->segments[] = $val;  // <--- ORIGINAL
                $this->segments[] = strtolower($val);   // <--- CHANGED
            }
        }
    }  
    

    Just consider that if you upgrade your install this changes will be overwritten, but they're so small anyway. Alternatively, you might go for a pre_system hook, but I think it would be much more difficult

    Also, in routes you should not use leading or trailing slashes, so it must be

    $route['companyname'] = "profile/1";
    
    0 讨论(0)
  • 2021-01-13 22:05

    Maybe you can use strtolower in your _remap function. It isn't sure that works, it was just an idea ;)

    0 讨论(0)
  • 2021-01-13 22:09

    IN Directory system/core/uri.php

    search about

    $this->_parse_request_uri()

    you will find 2 replace them with

    strtolower($this->_parse_request_uri())

    0 讨论(0)
  • 2021-01-13 22:17

    The easiest way I could think of is to enforce lowercase urls with mod_rewrite (if you're using apache...)

    RewriteMap  lc int:tolower
    RewriteCond %{REQUEST_URI} [A-Z]
    RewriteRule (.*) ${lc:$1} [R=301,L]
    

    Source: http://www.chrisabernethy.com/force-lower-case-urls-with-mod_rewrite/

    0 讨论(0)
  • 2021-01-13 22:19

    Just add expression "(?i)"
    Here example:
    $route['(?i)companyname'] = "/profile/1";

    0 讨论(0)
  • 2021-01-13 22:19

    Use Router:

    $urix = substr(strtolower($_SERVER['REQUEST_URI']), 1);
    
    $route["(?i)$urix"] = $urix;
    

    Solution for all Case Insensitive Routings..

    0 讨论(0)
提交回复
热议问题