伪静态:没有静态文件的静态化
伪静态实现
比如这个网页
http://www.*.net/soft.php/1,100,8630.html
其实处理的脚本是soft.php 参数为1,100,8630
相当于soft.php?a=1&b=100&c=8630 只不过这样的URL太难记。搜索引擎也不喜欢。
真静态只是完全生成了HTML。
客户端访问的时候直接输出。不用脚本解释。在流量非常大的时候(比如每天有上百万的访问量的时候)会起到很好的效果。也就是说服务器端实实在在的存在这个HTML页面。
当然在你网站的流量没有那么大的时候。URL重写是最好的方法(个人观点,大流量的时候可以考虑负载均衡了。同样没有关系)
附URL重写的方法有很多种,APACHE,IISREWRITE。甚至PHP脚本都可以直接处理。比如上例中就是PHP脚本直接处理(该方法好处是大流量的时候直接减轻WEB伺服器的压力。
【2重写规则实现】
apache rewrite:现URL的跳转和隐藏真实地址
2.Apache Rewrite的配置Apache下的Rewrite配置主要有两种,一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接
在httpd.conf下书写。配置步骤如下:
(1)去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号;
(2)然后再在httpd.conf中书写如下规则:
RewriteEngine on
#当访问任何以t_开头,以.html结尾的文件时,将$1用与(.*)匹配的字符替换后,访问相应的test.php页面
RewriteRule ^/t_(.*).html$ /test.php?id=$1
另一种是针对apache服务器下的某一目录的配置,此种配置的Rewrite规则需在此目录下建立一个.htaccess
文件来书写。配置步骤如下:
(1)去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号;
(2)修改httpd.conf文件中的(232行)"AllowOverride None"为"AllowOverride all",同时最好将Options
也置为"all",否则可能会出问题。
(3)在根目录中建立.htaccess文件,并用记事本打开,书写如下规则
分布式配置 具体的.htaccess文件中的配置: 在网站的根目录下创建一个文件,文件名为.htaccess
<ifModule rewrite_module>
#打开重写引擎
RewriteEngin on
#RewriteCond 判断条件(服务器变量) 条件表达式 [条件标志] 不要带根目录表示符“/”
#RewriteRule 规则url 目标url [规则的标志]
</ifModule>
4、具体的语法:
RewriteEngine on #开启重写引擎
RewriteCond 重写条件,要满足一定的条件才重写。
CI框架中的重写规则
第一步: 在虚拟主机开启 AllowOverride All
第二步: //配置伪静态时 在CI框架的配置文件config中 修改URL协议为
$config['uri_protocol'] = 'PATH_INFO';
RewriteCond条件的语法:
RewriteCond 判断依据 条件表达式 [条件标志]
(1)判断依据:可以使用服务器变量:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
比如:%{REQUEST_FILENAME} 表示请求的文件名称
比如:%{HTTP_REFERER}:表示请求的来源。
(2)判断路径
RewriteCond %{REQUEST_FILENAME} !-d //如果请求的路径不是一个目录
RewriteCond %{REQUEST_FILENAME} !-f //如果请求的路径不是一个文件
(3)[条件标志]
[NC]表示不区分大小写
[OR],在默认情况下多个条件(RewriteCond)之间是并且的关系。如果我们使用或关系则后台添加[OR]标志。
RewriteRule 语法规则
RewriteRule 规则的url(可以使用正则) 目标url [规则标志]
规则标志:
[F] 表示:表示禁止重写
[NC] 表示:不区分大小写
一下有一些写的规则!了以参考一下
#开启重写引擎
RewriteEngine on
#写重写规则
#RewriteRule (\d+)_(.*).html Day13/text.php?page=$1&&title=$2 [L,NC]
#RewriteRule index.html Day13/text.php [L,NC]
# %是如果的意思 {HTTP_REFERER} 请求的来源 一般非本站访问的头信息中都会有该来源 !^$ :非空
# %{HTTP_REFERER} !http://www.jb.com.* :该请求的来源不是来自于这个网站
# RewriteRule .*\.(jpg|png|gif|jpeg)$ 110.gif [L] :一旦上面两个满足条件就会触发该重写规则
#RewriteCond %{HTTP_REFERER} !^$ [NC]
#RewriteCond %{HTTP_REFERER} !http://www.jb.com.* [NC]
#RewriteRule .*\.(jpg|png|gif|jpeg)$ 110.gif [L]
# %{REQUEST_FILENAME} !-d 访问脚本文件名 -d 表示是一个目录 意思是
#:如果请求的路径不是一个目录
# {REQUEST_FILENAME} !-f :如果请求的路径不是一个目录
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule .* 404.html [L]
#写重写规则
RewriteRule (\d+)_.html Day14/page.php?page=$1 [L,NC]
RewriteRule page.html Day14/page.php [L,NC]