[PHP] PHP初学者想了解"伪静态",必须看这个贴 [复制链接] [推荐]
一、何为“伪静态”?
以传智播客bbs论坛为例,这篇帖子的链接地址原本应该是“http://bbs.itcast.cn/forum.php?mod=post&action=newthread&fid=181”,拼接好多参数,是不是看了之后“头疼”?不仅不好看,从seo的角度考虑,这类链接是非常不利于百度收录。所以,传智bbs论坛技术人员使用“伪静态”处理后,上面头疼的链接就是http://bbs.itcast.cn/thread-82858-1-1.html瞬间好看了很多,百度蜘蛛也会非常爱采集。
二、为何会有伪静态技术?
谈到这点,不能不说动态网页和静态网页,更不能不提他们二者优缺点。好了,那么问题来了, 怎么能结合静态网页和动态网页的优点呢?那就是伪静态。伪静态至少有三种优势:1.有 利用SEO 2. 防止sql注入 3. 不产生纯静态文件,因此不增加服务器负担!
静态网页优缺点:
优点:
1)静态网页的内容相对稳定,因此容易被搜索引擎检索;
缺点:
1)静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;
2)静态网页的交互性交叉,在功能方面有较大的限制。
动态网页优缺点:
优点:
1)动态网页以数据库技术为基础,可以大大减少降低网站维护的工作量;
2)采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等;
缺点:
1)动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取
网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求
当然伪静态也是有自身的缺点,比动态还要占用cpu资源,多一层匹配,每次都数据库查询。 好多人天天念叨效率,
如果是做企业站用个P效率阿? 一共就那么几条信息, 如果是大型网站,
实体文件多了也是蛋疼的事,磁盘I/O更头疼。在我们实际开发中,不希望使用真静态, 但是又希望有利于SEO,那就考虑使用伪静态.
三、如何制作伪静态?
说个简单例子吧, 比如文章详细页, 正常的调用是 bbs.itcast.cn/index.php?m=article&id=1, 这么不美观。我们要改成伪静态成为这种”bbs.itcast.cn/news/1.html“。
利用$article就是查询出来的数据是:
- <?php
- $article=array('id'=>1,'title'=>'发布i测试','content'=>'......' ......);
- echo "<a href='/news/{$article['id']}.html'>{$article['title']}</a>";
复制代码
提供两种方法!
nginx 规则
本帖隐藏的内容
rewrite ^/news/([0-9]+)\.html$ /index.php?m=article&id=$1 last;
apache 的伪静态规则
本帖隐藏的内容
RewriteRule ^news/([0-9]+)\.html$ index.php?m=article&id$1 [L]
四、解释apache 的伪静态为什么这么写?
apache的伪静态写法主要分成4部分,这里大概解释一下 为什么这样写 :
本帖隐藏的内容
RewriteRule 固定这么写,不告诉你为啥
^news/([0-9]+)\.html$ 这部分是匹配当前的url地址, 也就是伪静态的地址
[0-9]+ 表示至少有1个数字,可以是0也可以是无限大
index.php?m=article&id=$1 这里是指向对应的真实地址
$1 配对上面的第一个括号, $2匹配第二个以此类推
[L] L意思是如果此规则匹配,则停止,不在匹配后面的,减少无必要查询 。
如果无法理解建议查看正则视频教程:http://bbs.itcast.cn/thread-22094-1-1.html(最后一天课程就为正则)
[PHP] PHP初学者想了解"伪静态",必须看这个贴 [复制链接] [推荐]的更多相关文章
- 想学习SEO可以看哪些书籍
http://www.wocaoseo.com/thread-28-1-1.html 除了一些常见的比如入门推荐<走进搜索引擎>和进阶推荐<这就是搜索引擎--核心技术详解>之外 ...
- discuz x3在DIY模块中调用伪静态不成功,显示动态链接的解决办法
discuz x3在DIY模块中调用伪静态不成功,显示动态链接,然而其他的链接正常显示伪静态. 后台启用伪静态后,发现论坛版块.帖子点击链接,伪静态正常显示,然后在门户首页DIY显示的帖子,点进去后发 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:让按钮看起来像个链接 (仍然保留按钮行为)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 模板题 codevs 1993 草地排水 想学习的请看链接
不能再水的题了. Dinic算法,比EK更快. 想要学习请看链接 https://comzyh.com/blog/archives/568/ 并附上我的模板(其实和comzyh大神的一样) #in ...
- 上周面试回来后写的Java面试总结,想进BAT必看
上周陪同之前一起工作的同事去面试(乔治,小袁,鹏飞(面试人)),第一站是去深圳,第二站上海,第三站杭州.面试什么公司我在这里就不多说了,你们知道是一线公司就行.其实本来真的没打算写这篇文章,主要是自己 ...
- 从蓝瘦“想哭”到 SELinux 看操作系统安全何在
最近一周,来自网络的"想哭"勒索病毒(Wannacry Ransomware)在世界各地同时上演了一部绑匪大片,台词华丽,演技出色,当仁不让地新晋世界第一网红.全球各国除了默默忙于 ...
- 吐血推荐,想进BAT必看
不必太纠结于当下,也不必太忧虑未来,人生没有无用的经历,当你经历过一些事情后,眼前的风景已经和从前不一样了.--村上春树 一.包含如下内容 ActiveMQ消息中间件面试专题 BAT80道面试题 BA ...
- 想要学好JQuery看这里
一.简介 jQuery 库可以通过一行简单的标记被添加到网页中 jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操 ...
- 用java制作日历,想休息的时候看一看离周末还有几天!
呀!忙碌的每一天,都忘记了明天就是我们愉快周末了.今天没有朋友的闲聊的话,明天处在绷紧的状态呢!还有朋友提到,所有今天来跟大家分享一下用java来编写日历表,累了想休息了的时候,打开看看,还有几天到周 ...
随机推荐
- 航频卫士APP截图
- C#学习日志 day8 -------------- async await 异步方法入门(引用博客)以及序列化和反序列化的XML及json实现
首先是异步方法的介绍,这里引用自http://www.cnblogs.com/LoveJenny/archive/2011/11/01/2230933.html async and await 简单的 ...
- 【java】for循环输出数字金字塔
输出下列数字金字塔. 1 121 123211234321 public class deng { public static void main(String args[]) { int n ...
- php面向对象编程学习之高级特性
前几天写了一篇关于php面向对象基础知识的博客,这两天看了php面向对象的高级特性,写出来记录一下吧,方便以后拿出来复习. 面向对象除了最基本的定义类之外,最主要就是因为面向的一些高级特性,运用这些高 ...
- [Leetcode][Python]33: Search in Rotated Sorted Array
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...
- OpenNebula openldap集成
Preface: 当前写这篇post的心情可谓是即激动,又操蛋!............................ ruiy还是言归正传,人老了,赖的扯淡了,哥当前一心看向Tech(s),做个顾 ...
- 使用window.postMessage实现跨域通信
JavaScript由于同源策略的限制,跨域通信一直是棘手的问题.当然解决方案也有很多: document.domain+iframe的设置,应用于主域相同而子域不同: 利用iframe和locati ...
- javascript 获取调用属性的对象
最近碰到一个javascript 的小问题,是和闭包有关的,来自cnode 论坛,很有意思. var o = (function() { var person = { name: 'Vincent', ...
- 交互设计师谈颠覆式创新 | Think different
作者:Teambition 交互设计师 樊伟 本文由 Teambition 原创.转载请注明出处,附原文链接 题图:by Ed Chao 我们不需要像主流市场的大公司一样做类似相扑的庞大,而是需要像柔 ...
- BroadcastReceiver自学笔记
1. 使用步骤: 1.1 声明Intent Intent intent = new Intent("name");------静态常用 IntentFilter filter = ...