皇后难为苏小凉:伪静态------rewrite简介
来源:百度文库 编辑:中财网 时间:2024/05/05 19:15:06
伪静态
----什么是伪静态
说白了伪静态就是地址中不带"?",也就是平常在网上看的的以.html展示的页面
----伪静态的由来
伪静态是相对真实静态来讲的.通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面.都将文章内容生成静态页面就是展示出来的是以.html一类的静态页面形式
----伪静态的利与弊
利:有利于被搜索引擎收录,可以防止注入,也可以防止盗链。相对于真静态而言,伪静态的应用对硬盘的损坏小。
弊:伪静态将占用一定量的CPU占有率,其原因就是伪静态应用了大量的正则表达式,举个例子,就是有一个页面为“lampPHP.php?id=2”经过伪静态处理可以转为“lampPHP_2.html”或者“lamp_2.html”这都是可以的,所以这需要耗掉一定的内存来将其区分开的。
----实现伪静态
Apache配置:
启用rewrite
#LoadModule rewrite_module modules/mod_rewrite.so
去除前面的 #
LoadModule rewrite_module modules/mod_rewrite.so
启用.htaccess
AllowOverride None 修改为: AllowOverride All
------例1:
#加载rewrite模块
RewriteEngine on #开启rewrite重写引擎
RewriteBase / #存放路径
RewriteRule ^lamp.*?[_]([0-9]+).html lampPHP.php\?id=$1
效果就是当访问"lampPHP_2.html"时,而服务器确是访问"lampPHP.php\?id=$1"这就是伪静态的效果,把动态的变为“静态”。
------例2:
下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.kiya.cn和70.40.213.183都跳转到主机前缀为http://www.kiya.cn,避免相同内容的网页有多个指向的域名,如http://kiya.cn。
NameVirtualHost 70.40.213.183:80
ServerAdmin slj@kiya.cn
DocumentRoot “/web”
ServerName kiya.cn
RewriteEngine on #开启重写引擎
RewriteCond %{HTTP_HOST} !^www.kiya.cn [NC] #mod_rewrite 规则修正符
RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC]#mod_rewrite 规则修正符
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*) http://www.kiya.cn/ [L] #mod_rewrite 规则修正符
-------例3:
Rewrite 防盗链正则
不允许www.im286.com www.chinaz.com 这两个网站盗链 , 其它的网站都可以盗链的规则怎么写.
论坛中的答案是:
RewriteEngine On
RewriteCond %{HTTP_REFERER} chinaz.com [NC] #HTTP_REFERER:链接到当前页面的前一页面的 URL 地址
RewriteCond %{HTTP_REFERER} im286.com [NC]
RewriteRule.*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http://www.xxx.com/xxxx.png [R,NC,L]
解释: RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。
-------mod_rewrite 规则修正符
1) R 强制外部重定向
2) F 禁用URL,返回403HTTP状态码。
3) G 强制URL为GONE,返回410HTTP状态码。
4) P 强制使用代理转发。
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N 重新从第一条规则开始运行重写过程。
7) C 与下一条规则关联
如果规则匹配则正常处理,以下修正符无效
8) T=MIME-type(force MIME type) 强制MIME类型
9) NS 只用于不是内部子请求10) NC 不区分大小写
11) QSA 追加请求字符串
12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1
----什么是伪静态
说白了伪静态就是地址中不带"?",也就是平常在网上看的的以.html展示的页面
----伪静态的由来
伪静态是相对真实静态来讲的.通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面.都将文章内容生成静态页面就是展示出来的是以.html一类的静态页面形式
----伪静态的利与弊
利:有利于被搜索引擎收录,可以防止注入,也可以防止盗链。相对于真静态而言,伪静态的应用对硬盘的损坏小。
弊:伪静态将占用一定量的CPU占有率,其原因就是伪静态应用了大量的正则表达式,举个例子,就是有一个页面为“lampPHP.php?id=2”经过伪静态处理可以转为“lampPHP_2.html”或者“lamp_2.html”这都是可以的,所以这需要耗掉一定的内存来将其区分开的。
----实现伪静态
Apache配置:
启用rewrite
#LoadModule rewrite_module modules/mod_rewrite.so
去除前面的 #
LoadModule rewrite_module modules/mod_rewrite.so
启用.htaccess
AllowOverride None 修改为: AllowOverride All
------例1:
RewriteEngine on #开启rewrite重写引擎
RewriteBase / #存放路径
RewriteRule ^lamp.*?[_]([0-9]+).html lampPHP.php\?id=$1
效果就是当访问"lampPHP_2.html"时,而服务器确是访问"lampPHP.php\?id=$1"这就是伪静态的效果,把动态的变为“静态”。
------例2:
下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.kiya.cn和70.40.213.183都跳转到主机前缀为http://www.kiya.cn,避免相同内容的网页有多个指向的域名,如http://kiya.cn。
NameVirtualHost 70.40.213.183:80
ServerAdmin slj@kiya.cn
DocumentRoot “/web”
ServerName kiya.cn
RewriteEngine on #开启重写引擎
RewriteCond %{HTTP_HOST} !^www.kiya.cn [NC] #mod_rewrite 规则修正符
RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC]#mod_rewrite 规则修正符
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*) http://www.kiya.cn/ [L] #mod_rewrite 规则修正符
-------例3:
Rewrite 防盗链正则
不允许www.im286.com www.chinaz.com 这两个网站盗链 , 其它的网站都可以盗链的规则怎么写.
论坛中的答案是:
RewriteEngine On
RewriteCond %{HTTP_REFERER} chinaz.com [NC] #HTTP_REFERER:链接到当前页面的前一页面的 URL 地址
RewriteCond %{HTTP_REFERER} im286.com [NC]
RewriteRule.*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http://www.xxx.com/xxxx.png [R,NC,L]
解释: RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。
-------mod_rewrite 规则修正符
1) R 强制外部重定向
2) F 禁用URL,返回403HTTP状态码。
3) G 强制URL为GONE,返回410HTTP状态码。
4) P 强制使用代理转发。
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N 重新从第一条规则开始运行重写过程。
7) C 与下一条规则关联
如果规则匹配则正常处理,以下修正符无效
8) T=MIME-type(force MIME type) 强制MIME类型
9) NS 只用于不是内部子请求10) NC 不区分大小写
11) QSA 追加请求字符串
12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1