1

访问该方法的 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;
}

//输出:段

而不是:段/包含/斜杠

4

4 回答 4

7

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

内爆('/',func_get_args())

获取整个字符串。

于 2012-05-15T19:09:48.920 回答
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();
于 2012-05-15T20:28:38.417 回答
1

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

segment = 'somethingwith%2F'
http://localhost/new-tera/paper/lookup_doi/segment
于 2012-05-15T19:13:56.350 回答
1

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

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

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

于 2012-05-15T19:24:58.743 回答