codeigniter url包含前导斜杠的段

时间:2012-05-15 19:05:40

标签: php codeigniter uri

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

// output:segment

而不是:segment / containing / slash

4 个答案:

答案 0 :(得分:6)

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

implode('/', func_get_args())

获取整个字符串。

答案 1 :(得分: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();

答案 2 :(得分:1)

您可以通过在查询字符串中添加“%2F”来添加斜杠,希望这样可以正常工作

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

答案 3 :(得分:1)

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

echo site_url('controller / method /'。base64_encode($ variable));

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