[转载]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.jsecho 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
[转载]CodeIgniter配置之URL的更多相关文章
- proxy_pass反向代理配置中url后面加不加/的说明
在日常的web网站部署中,经常会用到nginx的proxy_pass反向代理,有一个配置需要弄清楚:配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把loca ...
- (已解决)#warning:尚未配置[微信]URL Scheme:wx4868b35061f87884, 无法使用进行授权。
#warning:尚未配置[微信]URL Scheme:wx4868b35061f87884, 无法使用进行授权. (说白了就是注册白名单) ” -canOpenURL: failed for URL ...
- nginx 配置支持URL HTML5 History 模式 与 设置代理
拾人牙慧:https://segmentfault.com/q/1010000007140360 nginx 配置支持URL HTML5 History 模式 location / { try_fil ...
- nginx 配置web 虚拟文件夹 而且codeIgniter,thinkphp 重定向url 地址
nginx 配置虚拟文件夹而且url 重定向 server { #侦听80port listen 8090; #定义使用www.xx.com訪问 server_name 127.0.0.1; #设定本 ...
- CodeIgniter配置之config
配置说明 $config['language']:指定项目语言包.需要注意的时Codeigniter自带的类库错误提示语言包位于/system/language/english/目录下,当这里配置非e ...
- CodeIgniter配置之SESSION
刚使用Codeigniter时也被其中的SESSION迷惑过,后来就再也没用过CI自带的SESSION,想必还是有必要整理一下SESSION.为弄清CI中的SESSION,先来说一下PHP中SESSI ...
- 【转】CodeIgniter配置之database
CodeIgniter的数据库配置文件位于application/config/database.php, 该文件中定义了$db的二维数组,参考文件如下: 1 2 3 4 5 6 7 8 9 10 1 ...
- wordpress 在linux上配置固定url方法
wordpress 设置固定url总结 相信好多用wordpress的网友为了提升wordpress对搜索引擎的友好,或者是为了写的博客地址更好记,都会在wordpress的后台设置固定url的方式. ...
- [转载]ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
引言-- 在初级篇中,我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由.也介绍了它本身的局限性-依赖于路由信息中的键值对: 如果键值对中没有的值,我们无法将 ...
随机推荐
- JSP标签:jsp内置标签、jstl标签、自定义标签
一.jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1 ...
- c#笔记2018-12-26
using System; /*C#学习笔记2018-12-26 * 1.@逐字字符串 * 2.数据类型转换 * 3.变量声明和占位符使用 * 4.接收用户输入值 * 5.const 关键字 * 6. ...
- Leetcode 388.文件的最长绝对路径
文件的最长绝对路径 假设我们以下述方式将我们的文件系统抽象成一个字符串: 字符串 "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" 表示: dir ...
- Leetcode 322.零钱兑换
零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: co ...
- 线段树 Mayor's posters
甚至DFS也能过吧 Mayor's posters POJ - 2528 The citizens of Bytetown, AB, could not stand that the candidat ...
- API错误码设计-资料
搜索到一篇文章:新浪微博API错误代码说明对照表 可以参考新浪微博的错误码设计思路,设计自己系统的错误码.
- BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包
发现需要求一个下凸的半平面上有几个交点. 然后我们把它变成凸包的问题. 好写.好调.还没有精度误差. #include <map> #include <ctime> #incl ...
- BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
我们枚举第一个经过的坏点,然后DP即可. 状态转移方程不是难点,难点在于组合数的处理. 将狼踩尽的博客中有很详细的证明过程,但是我只记住了结论 $n=a_1 * p^k+a_2*p^k-1...$ $ ...
- BZOJ 2176 Strange string ——最小表示法
本来想用来练习后缀自动机的,但是100w有点虚(事实证明确实T掉了). 只好上最小表示法. #include <cstdio> #include <cstring> #incl ...
- SGU 275 To xor or not to xor【最大xor和 高斯消元】
题目大意:给你n个数(n<=100)要你找出若干个数使他们的异或和最大 思路:高斯-若当消元消完以后削成若干个独立的行向量,将它们异或起来就好 #include<cstdio> #i ...