这篇文章将为大家详细讲解有关使用Ci框架url重写过程是什么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
需求,在框架里面访问地址 https://www.xx.net/de/twitter-video-download 由于框架里面方法不能使用-来命名,
我想到的方法是 twitter_video_download 为方法名,但是ci 框架本身的/ 导致重写不成功,
所以改了ci 框架的动态访问方式
问,如:
http://www.myweb.com/index.php/weclome/index (welcome表示控制器,index表示控制器中的一个方法)。
http://www.myweb.com/index.php/admin/welcome/index (admin表示控制器controler文件夹中的一个子文件,welcome表示admin里面的一个控制器,index表示welcome控制器中的一个方法)。
二、以前习惯用 http://www.myweb.com/index.php?c=welcome&m=index&x=123131 这种普通模式进行访问,对于这样的要怎么弄了,我想 CI 这种流行的框架,不会只有一种路径访问URL形式,这个基于MVC模式的框架,一定有那种普通模式进行访问URL的,这个一定和配置文件有关的,实践证明这个是正确的。
方法:打开应用文件application找到配置文件夹config,然后找到config.php文件,如下图
//以前 //$config['uri_protocol'] = 'REQUEST_URI'; //改之后 $config['uri_protocol'] = 'PATH_INFO'; $config['url_suffix'] = ''; $config['language'] = 'english'; $config['charset'] = 'UTF-8'; $config['enable_hooks'] = FALSE; $config['subclass_prefix'] = 'MY_'; $config['composer_autoload'] = FALSE; $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; //以前 //$config['enable_query_strings'] = FALSE; //改之后 $config['enable_query_strings'] = TRUE;
下面是nginx 重写的规则
location / {
location / {rewrite "([^/]{1,})/{1}([^/]{1,})-([^/]{1,})-([^/]{1,})" /index.php?c=$1&m=$2_$3_$4 last;rewrite "^/([^/]*)/{0,}" /index.php?c=$1&m=index last;break;}
break;
}
上面为什么需要加双引号 在nginx 重启时候出现这个错误 nginx:[emerg] directive “rewrite” is not terminated by “;”错误
错误原因:
后来调试发现,这是由于规则里有大括号“{ }”的符号,Nginx误以为这是规则的结尾,产生错误。
解决方法:
因此,为避免这种情况的发生,需要用双引号把伪静态规则给标识出来,就可以了。
下面是apache的规则
RewriteEngine on RewriteCond $1 !^(index.php|admin.php|images|statics|robots.txt) #/de 和 /de/都可以访问 RewriteRule ^([^/]*)/{0,}$ /index.php?c=$1&m=index [L] #/de/a-video-b -----> /index.php?c=de&m=a_video_b RewriteRule ([^/]{1,})/{1}([^/]{1,})-([^/]{1,})-([^/]{1,}) /index.php?c=$1&m=$2_$3_$4 [L]
-
关于使用Ci框架url重写过程是什么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。