[转载]CodeIgniter配置之URL

  应该有很多项目中会有这样的情况,通过 http://pc.local 可以访问,若通过 http://localhost/pc/public 则会出现一些图片、样式显示不到,超链接出错的情况,项目的移植性不太好,主要原因就是创建的URL不够灵活,接下来看看CI中是怎么处理。

  配置文件中有几个有关URL的配置,影响到路由、参数的获取和URL的创建,它们是:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

$config[‘base_url‘] = ‘‘;

$config[‘index_page‘] = ‘index.php‘;

$config[‘uri_protocol‘] = ‘AUTO‘;

$config[‘url_suffix‘] = ‘‘;

$config[‘allow_get_array‘]      = TRUE;

$config[‘enable_query_strings‘] = FALSE;

$config[‘controller_trigger‘]   = ‘c‘;

$config[‘function_trigger‘]     = ‘m‘;

$config[‘directory_trigger‘]    = ‘d‘;

$config[‘uri_protocol‘]

  uri_protocol可选项有AUTO、PATH_INFO、QUERY_STRING、REQUEST_URI、ORIG_PATH_INFO

  含义分别如下:
  QUERY_STRING:查询字符串;
  PATH_INFO:客户端提供的路径信息,即在实际执行脚本后面尾随的内容,会去掉Query String;
  REQUEST_URI:包含HTTP协议中定义的URI内容。
  访问:http://pc.local/index.php/product/pc/summary?a=1时
  PATH_INFO为/product/pc/summary;REQUEST_URI为/index.php/product/pc/summary?a=1;QUERY_STRING为a=1
  实际的配置跟服务器配置也会有点关系,有的服务器会配置ORIG_PATH_INFO,大部分没有。

  uri_protocol的值决定了CI路由和参数的获取方式,CI会通过这些值来判断解析到哪一个控制器,所以需要确保服务器配置了正确的值。大部分情况下设置AUTO即可,AUTO会依次检测REQUEST_URI PATH_INFO QUERY_STRING $_GET的值,直到读到内容。

  影响路由解析还有enable_query_strings参数,当该参数为TRUE时, 并且传入了controller_trigger参数,则会以查询字符串的方式来获取参数,如index.php?c=products&m=view&id=345则解析到product控制器中的view方法。

$config[‘allow_get_array‘]
  CI中封装了$this->input->get()方法来获取get参数,这里设置为true则表示也允许通过$_GET方式来获取参数,否则会清空$_GET中的值。

$config[‘base_url‘]
  该参数的设置会影响到base_url() site_url()函数创建的URL,为空时程序会自动获取当前地址,否则会根据设置的地址进行创建URL。
$config[‘index_page‘] 默认主页,使用site_url()创建时会带上该参数,若需要去掉index.php设置为空即可。
$config[‘url_suffix‘] 后缀名, 使用site_url()创建时也会带上该参数。
  以上两个参数的设置对base_url()无效,即不会追加 index_page 和 url_suffix的值。


1

2

3

4

5

//pc.local/bootstrap/js/bootstrap.min.js

echo base_url(‘bootstrap/js/bootstrap.min.js‘);

//pc.local/login.htm(设置了index_page=‘‘ url_suffix=‘.htm‘)

echo site_url(‘login‘);

所以可以发现,base_url() 用来创建静态资源的地址,如JS、CSS等地址需要用该函数来生成。site_url() 用来创建跟控制器地址相关的URL。

使用base_url()和site_url()函数创建的URL地址具有更好的移植性,建议系统URL相关的地址统一使用该函数创建。

  CI提供的site_url对于参数的处理还不够灵活,可以自己扩展一个create_url函数用来创建跟控制器相关的地址。下面为一种实现方式。

  扩展url_helper,在helpers中创建MY_url_helper.php,内容如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

function create_url($route = NULL, $params = array(), $ampersand = ‘&‘)

{

    $route = site_url($route);

    if(!empty($params)) {

        return $route.‘?‘.http_build_str($params, NULL, $ampersand);

    }

    return $route;

}

if(! function_exists(‘http_build_str‘))

{

    function http_build_str($query, $prefix=‘‘, $arg_separator=‘‘)

    {

        if (!is_array($query)) {

            return null;

        }

        if ($arg_separator == ‘‘) {

            $arg_separator = ini_get(‘arg_separator.output‘);

        }

        $args = array();

        foreach ($query as $key => $val) {

            $name = $prefix.$key;

            if (!is_numeric($name)) {

                if(is_array($val)){

                    http_build_str_inner($val, $name, $arg_separator, $args);

                }else{

                    $args[] = rawurlencode($name).‘=‘.urlencode($val);

                }

            }

        }

        return implode($arg_separator, $args);

    }

}

if(! function_exists(‘http_build_str_inner‘))

{

    function http_build_str_inner($query, $prefix, $arg_separator, &$args)

    {

        if (!is_array($query)) {

            return null;

        }

        foreach ($query as $key => $val) {

            $name = $prefix."[".$key."]";

            if (!is_numeric($name)) {

                if(is_array($val)){

                    http_build_str_inner($val, $name, $arg_separator, $args);

                }else{

                    $args[] = rawurlencode($name).‘=‘.urlencode($val);

                }

            }

        }

    }

}

--EOF--

转自 http://itopic.org/codeigniter-config-url.html

时间: 2024-10-05 05:32:09

[转载]CodeIgniter配置之URL的相关文章

nginx 配置web 虚拟目录 并且codeIgniter,thinkphp 重新url 地址

nginx 配置虚拟目录并且url 重写 server { #侦听80端口 listen 8090; #定义使用www.xx.com访问 server_name 127.0.0.1; #设定本虚拟主机的访问日志 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /home/lxy/www/cs/; #定义服务器的默认网站根目录位置 #默认请求 location / { index inde

CodeIgniter 如何解决URL含有中文字符串

codeIgniter默认的配置下是不允许URL中包含非ASCII字符的,如果URL中含非ASCII字符,那么CI会毫不客气的抛出错误.本文章向码农介绍CodeIgniter 如何解决URL含有中文字符串. 你 可能会说,那我把这个URL使用函数urlencode一下呢?不行.因为Web Server会在接收到一个被urlencode的URL后自动将其decode,然后在PHP里得到的这些字符串转换成他原来所代表的含义,并使用 Web Server自己的URL编码字符集(IIS6 中文版是GBK

(已解决)#warning:尚未配置[微信]URL Scheme:wx4868b35061f87884, 无法使用进行授权。

#warning:尚未配置[微信]URL Scheme:wx4868b35061f87884, 无法使用进行授权. (说白了就是注册白名单) " -canOpenURL: failed for URL: "weixin://app/wx4868b35061f87885/" - error: "This app is not allowed to query for scheme weixin"  " 此error源自iOS9 URL Scheme

[转载]DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)

一.错误情况 环境:win7+iis7.0 DirectoryEntry配置IIS7出现如下错误 或者是 下面一段代码在IIS6.0下运转正常,但IIS7.0下运转会出错: System.DirectoryServices.DirectoryEntry iisServer;iisServer = new System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/1");System.DirectoryServices.

Exchange 2013 配置外部 URL

配置外部 URL(客户端通过外网访问服务器mail.contoso.com) 估计完成时间:5 到 10 分钟 在客户端通过 Internet 连接到服务器之前,您需要在客户端访问服务器的虚拟目录上配置外部域或 URL,然后配置公共域名服务 (DNS) 记录.以下步骤对每个虚拟目录的外部 URL 配置相同的外部域.如果您要对一个或多个虚拟目录外部 URL 配置不同外部域,那么您需要手动配置外部 URL.有关详细信息,请参阅虚拟目录管理. 我该如何做? 浏览至您的客户端访问服务器的 URL,打开

Exchange 2013 配置内部 URL

配置内部 URL(客户端通过内网访问mail.contoso.com) 估计完成时间:10 至 15 分钟 在客户端可以从 Intranet 连接到新服务器之前,您需要在客户端访问服务器的虚拟目录上配置内部域或 URL,然后配置您的专用域名服务 (DNS) 记录. 您可以选择用户在 Intranet 和 Internet 上使用相同的 URL 还是不同的 URL 访问您的 Exchange 服务器.您的选择取决于您已准备就绪或要实施的寻址方案.如果您要实施新的寻址方案,我们建议您使用相同的内部和

[转载] scribe配置

目录(?)[-] Scribe can be configured with Global Configuration Variables Store Configuration Store Configuration Variables File Store Configuration Network Store Configuration Buffer Store Configuration Bucket Store Configuration Null Store Configuratio

Office 365系列之十四:配置自定义URL访问个人Portal和网页版Outlook

在之前的文章中我们已经通过添加自定义域名实现将用户登录名和电子邮件地址修改为公司的域名.但是如何实现通过自定义的URL访问Office 365 Portal和Exchange OWA. 1.  配置自定义URL 1.1  在开始本章节之前请确保已经在Office 365管理中心添加好了自定义域,关于如何添加自定义域请参考黄锦辉专栏,链接:http://stephen1991.blog.51cto.com/8959108/1596060 1.2 实现通过portal.wangld.com访问Off

nginx 配置web 虚拟文件夹 而且codeIgniter,thinkphp 重定向url 地址

nginx 配置虚拟文件夹而且url 重定向 server { #侦听80port listen 8090; #定义使用www.xx.com訪问 server_name 127.0.0.1; #设定本虚拟主机的訪问日志 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /home/lxy/www/cs/; #定义服务器的默认站点根文件夹位置 #默认请求 location / { index