【问题标题】:codeigniter url segments containing leading slash包含前导斜杠的 codeigniter url 段
【发布时间】:2012-05-15 19:05:40
【问题描述】:

访问方法的url是这样的: http://localhost/site/cont/method 我想使用 GET 方法访问此方法,如下所示: http://localhost/new-tera/paper/lookup_doi/segment 但我的 segment 部分已经包含 / 像这样:

http://localhost/lookup_doi/segment/containing/slashes 请注意,整个segment/containing/slashes 是一个值。

我在这样的方法中得到这个值:

public function method ($variable)
{
  echo $variable;
}

//输出:段

而不是:段/包含/斜线

【问题讨论】:

    标签: php codeigniter uri


    【解决方案1】:

    CodeIgniter 将其余的作为附加参数传递。您可以指定附加参数(如果数量是固定的)或使用:

    implode('/', func_get_args())

    获取整个字符串。

    【讨论】:

      【解决方案2】:

      .htaccess 桅杆是

      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-l
      RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
      

      还好……

      $route = empty($_GET['route']) ? '' : $_GET['route'];
      $exp = explode('/', $route);
      

      结果:

      $exp[0] = new-tera
      $exp[1] = paper
      $exp[2] = lookup_doi
      $exp[3] = segment
      

      所以我们有路由!运行示例(与我的项目):

       if($exp[0] == '')
              {
                $file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_index.php'; 
              }
              else
              {
      
                $file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_'.$exp[0].'.php'; 
              }    
              if(!file_exists($file))
              {
                  engine :: away(); 
              }
      
      
              include_once $file;
      
      
              $class = (empty($exp[0]) or !class_exists($exp[0])) ? 'class_index' : $exp[0];
      
      
              $controller = new $class;
      
              $method = (empty($exp[1]) or !method_exists($controller, $exp[1])) ? 'index' : $exp[1];
      
      
      
              $controller -> $method();
      

      【讨论】:

        【解决方案3】:

        您可以通过在查询字符串中添加“%2F”来添加斜杠,希望这会起作用

        segment = 'somethingwith%2F'
        http://localhost/new-tera/paper/lookup_doi/segment
        

        【讨论】:

          【解决方案4】:

          您可以先对其进行 base64 编码,然后再对其进行解码。确实,您可以使用多种方法将 / 更改为其他内容(即 -)并将其改回。

          echo site_url('控制器/方法/' .base64_encode($variable));

          公共函数方法($variable) { $variable = base64_decode($variable); }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-13
            • 1970-01-01
            • 2023-04-06
            • 2016-08-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多