极端优化,CI中的url相关函数以及路由设置和伪静态技术

  当使用CI框架举办付出时,大家的局地数目传递的U奇骏L不应有写死,可以运用如下方法;比如说大家须求表单提交二个多少;

A8U论坛的开发者发现看样子很有须要发个帖子了,URAV4L格式是如此的第2
转自这里,能够看一下原文.

秉承MVC架构的思想,CI中的全数控制器都亟需通过单点入口文件index.php(私自认同)来加载调用。也等于说,在暗中同意情况下,全数CI开发项目的U路虎极光L都形如以下那种样式:

伪静态

从样式上看是2个静态地址,实际上依然访问的动态地址,

比如:访问:

实际是:;

功效:重若是便民seo,静态页面的方式,对比不难被寻找引擎给采访。

  Localhost/6.php     输入 localhost/6.html
同样能出口跟6.php同样的内容   

 

一,已毕原理:

使用apac he的rewrite机制。

rewrite机制:就是一个url的重写机制,

贰,怎么样打开重写模块,

在httpd.conf文件中进行开启。

 

 

三,配置方式:

  1)间接在布置虚拟主机httpd-vhosts.conf进行配置
,每一趟修改apache的文书都急需重启apache

    <VirtualHost *:80>

  #主机名

   ServerName  localhost

   #翻开重写引擎

   RewriteEngine on

   #写重写规则

   RewriteRule /index.html  /6.php [L]

   #文本的根目录路径

   DocumentRoot  “E:/server/apache/htdocs”

<Directory  “E:/server/apache/htdocs”>

   #布局体制

  #开辟默许的首页

DirectoryIndex  index.php  index.html

#开拓私自认同索引列表  

    Options  Indexes  FollowSymLinks    

   #权限

  #权限控制   先拒绝后同意

   Order Deny,Allow  

 #同意持有用户进行访问

   AllowOverride All

    Allow from  All   

  </Directory>

</VirtualHost>

  1. httpd.conf文件

<Directory />

    AllowOverride all    改成all

    Require all denied

</Directory>

  3)分布式配置 具体的.htaccess文件中的配置:
在网站的根目录下创办一个文书,文件名为.htaccess

  <ifModule rewrite_module>

   #开辟重写引擎

   RewriteEngin on

   #RewriteCond 判断标准(服务器变量) 条件表明式  [标准化标志]

   #RewriteRule  规则url   目标url  [规则的标志]   (.*).html  
$1.php [L]

 </ifModule>

肆,具体的语法:

RewriteEngine on  #打开重写引擎

RewriteCond  重写规范,要知足一定的标准化才重写。

 

CI框架中的重写规则

先是步: 在虚拟主机开启  AllowOverride All

其次步: //配置伪静态时 在CI框架的安排文件 config中 修改 U奥迪Q5L共商为

$config[‘uri_protocol’]     = ‘PATH_INFO’;

 

RewriteCond条件的语法:

RewriteCond   判断依照   条件发挥式 [条件标志]

 

(1)判断依据:可以采用服务器变量:

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

比如:%{REQUEST_FILENAME}  表示请求的文件名称

比如:%{HTTP_REFERERubicon}:表示请求的来源于。

 

(2)条件表达式:可以是有个别讲明,或然字符串

 

比如:

-d   表示是壹个目录

-f    表示是壹个文件

 

RewriteCond %{REQUEST_FILENAME} !-d  //若是请求的路子不是二个目录

RewriteCond %{REQUEST_FILENAME} !-f  //假诺请求的路径不是三个文本

(3)[规范标志]

[NC]意味着不区分轻重缓急写

[OR],在暗许情形下多个尺码(RewriteCond)之间是同时的关联。要是大家应用或关系则后台添加[OR]标志。

 

 

 

RewriteRule  语法规则

RewriteRule   规则的url(可以动用正则)  目的url  [规则标志]

平整标志:

[F] 表示:表示禁止重写

[NC] 表示:不区分轻重缓急写

伪静态是周旋真实静态来讲的,常常我们为了做实探寻引擎的
友好面,都将小说内容生成静态页面,但是部分朋友为了实时的显得一些音信。或者还想行使动态脚本解决一些题材。不可以用静态的点子来展示网站内容。可是那就
损失了对寻找引擎的祥和面。如何在两者之间找个中等方法吗,那就发生了伪静态技术。就是显得出来的是以html一类的静态页面形式,但其实是用ASP一
类的动态脚本来处理的。

用IIS的404错误处理机制来贯彻的。这几个比rewrite技术要灵活的多。

首先,设置站点品质-自定义错误,找到HTTP不当404,然后编辑属性->新闻类型选中U本田CR-VL->URL填入“/index.asp”,或你的错误处理页面。

这么,比如用户或蜘蛛访问

在index.asp里添加

CurrDomain=Request.ServerVariables(“HTTP_HOST”) ‘当前走访域名

CurrURL=Replace(Request.ServerVariables(“QUERY_STRING”),”404;”)
‘当前作客ULacrosseL

此时的CurrURL应该是:12345.html .

这么,就获取用户正在试图访问的页面。然后提取里边的小说ID(应该为:12345),用正则,那里就不多说了。

接下来到数据Curry提取出小说内容。输出到页面里,就OK了。

诸如此类。用户或蜘蛛看到的URL可能她访问的U本田CR-VL.而作者辈对情节的处理上得以用到了动态技术。那就是大家想要的结果。说得不难了有些。可是基本思路就是这样了。

 

    1.在controller控制器中大家需要先创立二个加载helper和视图的艺术;

A8U论坛的开发者发现前面先说清楚某个,使用CI开发生成地址应该百分之百用site_url()扶助函数和相关赞助函数达成,实在不行本身壮大url匡助函数.否则你会蒙受或然大概遇见高烧的或潜在的难题.
再有某个要领会anchor() redirect()
current_url()等url相关的函数都以通过调用site_url()已毕的,相当于说site_url()是最底部的.
搞驾驭那一个可以翻阅下文了.
CI版本 1.7.2
例如:
要浏览某一篇小说地址很大概如下

极端优化,CI中的url相关函数以及路由设置和伪静态技术。PHP怎样落到实处网址伪静态

Apache的
mod_rewrite是比较强硬的,在进展网站建设时,可以由此这一个模块来落到实处伪静态。

要害步骤如下: 1.检测 Apache是或不是开启mod_rewrite作用    
可以透过php提供的phpinfo()函数查看环境陈设,找到“Loaded
Modules”,其中列出了有着apache2handler已经拉开的模块,借使中间包罗“mod_rewrite”,则早已支撑,不再须要继续设
置。借使没有打开“mod_rewrite”,则打开目录 apache目录下的“/apache/conf/”
,找到 httpd.conf 文件,再找到“LoadModule
rewrite_module”,将前方的”#”号删除即表示取用该意义。   
如果没有寻找到“LoadModule” 区域,可以在最终一行加入“LoadModule
rewrite_module
,modules/mod_rewrite.so”(独占一行),之后重启apache服务器。再通过phpinfo()函数查看环境安顿就有
“mod_rewrite”为项了.。

 2.让apache服务器协助.htaccess   
如何让自身的地面APACHE服务器协助:“htaccess”呢?
只需修改apache的httpd.conf设置就可以让 APACHE帮忙“.htaccess”了。打开
APACHE目录的CONF目录下的httpd.conf文件,找到: Options
FollowSymLinks AllowOverride None 改为 Options
FollowSymLinks AllowOverride All 就行了。

 3.建立.htaccess 文件   
建立.htaccess文件时要留意,不可以直接建,方法是经过记事本中的另存为菜单,在文件名窗口输入:“.htaccess”,然后点击保存。

 4.rewrite 规则学习   
在新建.htaccess文件之后,就在其间写入以下内容: RewriteEngine on
#rewriteengine为重写引擎开关on为打开off为关门 RewriteRule
([0-9]{1,})$index.php?id=$1 在此处,RewriteRule是重写规则,是用正则表明式的语句,([0-9]{1,})表
示由数字组成的,$表示截至标志,表示以数字甘休!即便要促成伪静态页面,规则如下: RewriteEngine
on RewriteRule
([a-zA-Z]{1,})-([0-9]{1,}).html$index.php?action=$1&id=$2 在为个正则表明式中,
([a-zA-Z]{1,})-([0-9]{1,}).html$是平整,index.php?action=$1&id=$2是要替换的格
式,$1代表第一,括号匹配的值,$2代表第贰,个括号的值,如此类推! 测试PHP脚本如下: index.php文件中的代码如下: echo
‘你的Action值为:’ . $_GET[‘action’]; echo ‘ ’; echo ‘ID值为:’ .
$_GET[‘id’]; ?>

在浏览器地址栏输入: localhost/page-18.html 输出的是: 你的Action值为:page ID值为:18

 

哪些抉择真静态和伪静态?

网站实时性需要高,不要使用静态化(真静态,伪静态均不适当)。

借使网站访问量较小,没有要求选拔静态化技术

借使数量项目不多,但是访问频率极大,提出利用真静态,比如新浪音讯频道。

若果数量项目海量,使用真静态会生成海量的html静态页面,提议采纳伪静态。

在一个大型网站中,静态化技术是汇总运用的,那么些须要大家经验的累积,多做项目。(sina网站:新闻频道,真静态,基金频道:伪静态,管理后台:不行使静态技术)

 

        eg:pubulic fuction add(){

内部code是控制器名称,view是控制器的办法,81是参数一般传递的是文章的ID.
明天要重写城

很明显,暗中同意情形下,index.php在ULX570L地址段中的存在一定水平上影响了URubiconL的简短和SEO的进展。大家得以经过上面本文介绍的法门来去掉那么些讨厌的Index.php。

            $this -> load -> helper( ‘ url ’
);  //首先加载 helper( ‘url’ )
到一流对象中,site_url函数在helper的相助函数中;

先说下基本原理,首先对地点重写,然后对重写的地址解析.
通过钻研CI的源码发现地址变更全体利用url帮助函数site_url,所以从site_url下手

您只怕已经注意到在CodeIgniter用户手册中,已经存在关于此题材的缓解措施。但官方提供的那些.htaccess配置,并不是富有时候都能一蹴而就难点。本文未来交给3个更周密的消除方案。

            $this -> load -> view( ‘ user/add ‘
)  //其次加载视图文件;

1。扩张原有的url帮忙函数
在application目录的helper目录下建立X_url_helper.php
(X_是前缀,取决于你的config配置),代码如下
PHP复制代码
  /*
 * 调用rewrite的site_url
 */
if ( ! function_exists(‘site_url’))
{
 function site_url($uri = ”)
 {
  if(function_exists(‘rewrite’)){
   $uri=rewrite($uri);
  }
  $CI =& get_instance();
  return $CI->config->site_url($uri);
 }
}
//重写url,用于router中优化url
//在url协助函数site_url中调用
if ( ! function_exists(‘rewrite’))
{
 function rewrite($url){
  $CI=&get_instance();
  $CI->config->load(‘rewrite’,TRUE);
  $rewrite=$CI->config->item(‘rewrite’);
  
  ksort($rewrite[‘pattern’]);
  ksort($rewrite[‘replace’]);
  
 
$url=preg_replace($rewrite[‘pattern’],$rewrite[‘replace’],$url,1);
  return $url;
 }
}
复制代码

留意:在后续从前,请确认你的主机扶助.htaccess配置。其中,假设Apache作为Web服务器,须求打开mod_rewrite模块的援救;假使将IIS作为Web服务器,则必要万分安装ISAPI_Rewrite拓展。

          }

2。成立重写规则,在config目录下创制rewrite.php文件.
PHP复制代码 A8U论坛
  <?php 
/*
 * 在rewrite支持函数中
 */
$config[‘pattern’]=array();
$config[‘replace’]=array();
//查看code详细内容的
$config[‘pattern’][0]=’/code\/view\//i’;
$config[‘replace’][0]=’code_’;
//tags
$config[‘pattern’][1]=’/tags\/index\/(.+)/i’;
$config[‘replace’][1]=’tag_\\1′;
复制代码

具体方法如下:

    2.开立1个insert方法来接受post提交的数码;

3。对重写的url解析,解析通过config目录下的routes.php完成.
PHP复制代码
  //查看code详细内容
$route[‘code_(:num)’]=”code/view/$1″;
//tags
$route[‘tag_(:any)’]=”tags/index/$1″;
复制代码

  1. 将以下配置新闻复制并保留为.htaccess文件。
    以下为.htaccess文件音信

    3.说到底就足以在view视图中接纳site_url函数生成ULX570L地址

复制代码 代码如下:

        <form action = ” <?php echo site_url( ‘
user/insert ‘ )> ” method=”post”>

RewriteEngineOn

  官方的文档中是那样表明的;

RewriteBase / 

    依照安插文件重返您的站点 UOdysseyL 。index.php
(获取其余你在配备文件中装置的 index_page 参数) 将会含有在你的 ULANDL
中,此外再添加你传给函数的 ULX570I
参数,以及配置文件中装置的 url_suffix 参数。

RewriteCond %{REQUEST_FILENAME} !-f

    推荐在任哪一天候都应用那种情势来生成你的 U陆风X8L ,那样在你的 U奥迪Q5L
变动时您的代码将具有可移植性;

RewriteCond %{REQUEST_FILENAME} !-d 

  site_url(控制器/方法);该函数重回项目根目录的url ;

RewriteRule^(.*)$ /index.php?/$1 [L]     

  也可以根据要求配备helper扶助函数url的电动加载,不过不引进应用,如url使用频仍可拔取;具体陈设操作如下;

#假使没有安装mod_rewrite模块,全部的404页面都将被
#发送到index.php,此时,程序会像没有设置隐藏时一样运维  
ErrorDocument404 /index.php

    在application/config/autoload.php中查找到$autoload[‘ helper ‘]
= array( ‘url’ )举办布署;

2.
将以上.htaccess文件上传到CI所在项目标根目录(即与index.php同级目录下)

  路由设置,伪静态,隐藏入口文件

  1. 修改application/config.php中的如下参数:

    在application/config/routes.php文件中查找到$route[ ‘
default_contorller ‘ ] = “welcome”
;进行计划,暗中同意配置是welcom控制器;

复制代码 代码如下:

    伪静态技术:

$config[‘index_page’] = “index.php”;

      CI中的伪静态经常是在application/config/routes.php文件中写一段正则表明式来完毕;

        eg : $route[ ‘ news / [/d]{6} / ([\d] + )\.html ‘
] = ‘article/show/$1’;

复制代码 代码如下:

        //当输入
时则会造访到
主机名/入口文件/article/show/4  //(随便输六个数)(那里4是传的参数);    

$config[‘index_page’] = “”; //设置为空

      有正则表达式在中游支持,可以使url任意突显成你想体现的url;

以上三步,缺一不可。假诺全部布置经常,你会发现,再度运营程序的时候,程序已经自行隐藏index.php这一个U帕杰罗L段了!

    隐藏入口文件:

Trackback(UTF-8):

      首先要在 apache/conf/httpd.conf 文件中安装 LoadModule
rewrite_module modules/mod_rewrite.so
打消注释,重启apache;再新建2个文书文件另存为,文件名输入”.htaccess”保存放入CI根目录下(由于.htaccess文件不可以直接开立),再在.htaccess文件中输入以下内容即可;

CodeIgniter中开启PATH_INFO时mod_rewrite隐藏index.php的问题。

      <Ifmodule mod_rewrite.c>

在CodeIgniter中,当作者将U福睿斯I寻址方式从AUTO更改为PATH_INFO时,即:

        RewriteEngine on

复制代码 代码如下:

        RewriteCond %{REQUEST_FILENAME} ! -d

$config[‘uri_protocol’] = ‘PATH_INFO’;

        RewriteCond %{REQUEST_FILENAME} ! -f

注:PATH_INFO的打开,是因为小编期望通过$_GET来取值,而不是系统暗许的POST形式。

        RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

在此情况下什么还是使用以上.htaccess方案,结果将是:index.php顺遂隐藏,但主控制器并不恐怕科学的拿走值。

      </Ifmodule>

缓解方案如下,就一步:

破除以下重写规则中index.php前面的问号即可。

复制代码 代码如下:

 RewriteRule^(.*)$ /index.php?/$1[L]

修改后的规则如下:

复制代码 代码如下:

 RewriteRule^(.*)$ /index.php/$1 [L]

澳门葡京备用网址 ,其他地点不变。

怎么着删除index.php文件

猜测很四人读书CodeIgniter第1步想做的就是哪些去掉index.php,那个官方手册就有连带学科,修改.htaccess
文件(前提是您的服务器是apache):

复制代码 代码如下:

    RewriteEngine on
    RewriteCond $1 !^(index\.php|images|robots\.txt)
    RewriteRule ^(.*)$ /index.php/$1 [L]

自然了,有无数人如约须求修改了,不过却现身了错误,全数的拜会都404了,而且,那一个404是apache的404页面,而不是CodeIgniter的404错误页面。

并发这种难点,是对apache的rewrite规则不亮堂:

    第贰行、将RewriteEngine引擎设置为on,就是让url重写生效;
    第2行、配置url重写规则,!^(index\.php|images|robots\.txt)
这些正则表明式指明了哪些文件不须求重写,而是径直访问;
   
第三行、^(.*)$是五个正则表明式,意思是对富有请求都发送到/index.php/$1,熟习url的人都清楚,以反斜杠(/)早先的,都以相对路径,相对于什么人啊?根,相当于网址。

就此啊,假若CodeIgniter假使不是设置在网站的根目录,必然会并发错误。如何化解呢,在CodeIgniter手册中也交给了对应的缓解方案:

把上面最终一句改为:

复制代码 代码如下:

RewriteRule ^(.*)$ index.php/$1 [L]

只需求去掉index.php前边的斜杠就行。

什么添加url后缀

透过下边的步子,我们早就隐藏了index.php了,将来大家制作的网站特别的rest了,一般人一度黔驴技穷一眼就看看你的网站是用CodeIgniter开发的,依旧ROLAND开发的。

唯独,怎么着在url前边扩展后缀呢,那样,大家竟然可以隐藏恐怕伪造网站的支出语言,通过改动
config/config.php 文件,你可以为 CodeIgniter 生成的 ULX570L
添加贰个指定的公文后缀,比如您能够添加.html,甚至你能够添加.asp,.jsp。

这么大家就可以将 //www.jb51.net/index.php/news/view/about 变成
//www.jb51.net/index.php/news/view/about.html。
怎样利用查询字符串

貌似景况下大家不需求选用查询字符串,可是,总有局地奇特情况,是大家用CodeIgniter的rest情势不可能到位的,那样咱们就须要在
U卡宴L 中应用查询字符串:

复制代码 代码如下:

    index.php?c=products&m=view&id=345

CodeIgniter 暗中认可此成效是关门的,如若想打开的话,打开配置文件
application/config/config.php 您可以看出如下内容:

复制代码 代码如下:

    $config[‘enable_query_strings’] = FALSE;
    $config[‘controller_trigger’] = ‘c’; //控制器名
    $config[‘function_trigger’] = ‘m’; //方法名
    $config[‘directory_trigger’]=’d’; //控制器所在子目录名称

尽管你将 enable_query_strings 更改为 TRUE
,那么这几个意义就被激活了。此时,你就可以通过紧要字来调用要求的控制器和办法了:

复制代码 代码如下:

    index.php?c=controller&m=method

当我们在应用CodeIgniter制作分页的时候,那几个就可以派上用场了。

你或者感兴趣的稿子:

  • PHP 开发者该知道的 5 个 Composer
    小技巧
  • PHP管理看重(dependency)关系工具 Composer
    安装与应用
  • 用 Composer营造本人的 PHP 框架之设计
    MVC
  • CI(CodeIgniter)框架中的增删改查操作
  • CI框架入门示例之数据库取多少完全兑现情势
  • CI框架中site_url()和base_url()的区别
  • CI(CodeIgniter)框架介绍
  • CI(CodeIgniter)框架配置
  • php ci框架验证码实例分析
  • CI框架使用composer安装的依靠包步骤与办法分析

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website