PHP伪静态的设置
首先:
必须要空间支持 Rewrite ,相关的配置放在httpd.conf中的<Directory /></Directory>中,或httpd-vhosts.conf中的<VirtualHost *:80></VirtualHost>中或.htaccess中都可以。
如需使用.htaccess则需开启 .htaccess 的文件解析,才有效.
如何让空间支持Rewrite 和 .htaccess 的文件解析呢 往下看
第一步:要找到apache安装目录下的httpd.cof文件,在里面找到
<Directory />
</Directory>
把none改all
第二步:找到以下内容:
#LoadModule rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so
第三步:保存重启apache。
ok。
其次是.htaccess的书写规则:
.htaccess加入以下内容
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)list-id([0-9]+)\.html$ $1/company/search.php?sectorid2=$2
RewriteRule ^(.*)cominfo-([a-z0-9]+)\.html$ $1/member/index.php?uid=$2&type=cominfo
RewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1/plus/list.php?typeid=$2&PageNo=$3
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.lujin\.com$
RewriteCond %{HTTP_HOST} !^(www|bbs)\.lujin\.com$
RewriteRule ^/?$ /%{HTTP_HOST}
RewriteRule ^/([a-z0-9\-]+)\.lujin\.com/?$ /member/index.php?uid=$1 [L]
对上面的一些解释
RewriteRule ^(.*)list-id([0-9]+)\.html$ $1/company/search.php?sectorid2=$2
这条是把企业库的分类进行伪静态处理
原先假设访问地址为http://www.xxx.com/company/search.php?sectorid2=1
现在地址为http://www.xxx.com/list-id1.html
优点:1、伪静态处理加速搜索引擎收入
2、地址映射到根目录,增加权重,提高排名
3、也不知道还有什么……
RewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1/plus/list.php?typeid=$2&PageNo=$3
这个是供求等分类的列表,和上面的原理类似,到页面相应修改即可
下面是会员空间的二级域名方案
前提是把域名设置好泛解析
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.lujin\.com$
RewriteCond %{HTTP_HOST} !^(www|bbs)\.lujin\.com$
RewriteRule ^/?$ /%{HTTP_HOST}
RewriteRule ^/([a-z0-9\-]+)\.lujin\.com/?$ /member/index.php?uid=$1 [L]
假设原先的地址为http://www.xx.com/member/index.php?uid=admin
现在地址为http://admin.xx.com
你只要在你想出现的地方放上这个就可以,比如在列表页面可以用[field:writer/]获取用户名,那么就可以在列表页面直接链接会员空间,可以写成http://[field:writer/].xx.com
Apache服务器中如果要将URL地址重写,正则表达式是最基本的要求。但对于一般的URL地址来说,基本的匹配就能实现我们大部分伪静态化要求;因此除非是非常特殊的URL地址(但这不是我要讨论的范围),简单几招就可以学会Apache中URL地址重写,通过实例展示,轻松学会URL伪静态化重写。
URL实例
重写URL:http://shuimu.js.cn/?p=51
原始URL:http://shuimu.js.cn/p51.html
重写规则:
^p([0-9]+)\.html
正则基础知识:
^ 匹配行的开始,匹配URL地址的开头部分,对于RewriteRule而言,域名(http://shuimu.js.cn)不算是URL地址的一部分,如上:?p=51
() 分隔一个被捕获的表达式,如上:([0-9]+)
[] 定义字符类,如上:[0-9] 表示从0-9的数字
+ 说明前面的字符可以被重复匹配1次或数次,如上:[0-9]+,表示任何数字组合
\ 字符转义,如上:转义.
其它:
[L] 表示last,停止匹配其它
方法如下:
RewriteEngine On
RewriteRule ^p([0-9]+)\.html
生成伪静态html
在<VirtualHost>段最后加入
RewriteEngine on
RewriteRule /goods([0-9]+).html /goods.php?id=$1 [PT]
更标准的写法为:
RewriteRule ^(.*)/goods([0-9]+).html$ $1/goods.php?id=$2 [PT]
更简洁的写法:
/goods(\d+)\.html /goods\.php\?id=$1
第一个(0-9]+)对应参数$1,以此类推第二个对应$2
举例:
RewriteRule /forum-([0-9]+)-([0-9]+)\.html /forumdisplay.php?fid=$1&page=$2 [PT]
测试http://www.xxx.com/goods1.html 是否与/goods.php?id=1的内容相同
最后将所有链接换成设置后的伪静态html地址方式
[PT]:url全局转换,即转换过的goods31.html对应goods.php?id=31 (默认就是这个不加参数)
[R]:
php伪静态分析
一直在做php的开发工作.在开发的过程中老早就听说了“伪静态”这一说。但是一直没有对其进行了解。
今天终于下定决定 要好好的了解下这方面的内容。
首先,什么是伪静态:
伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说就是,动态网页通过重写
另外在补充两个名词解析
静态网址:纯静态HTML文档,能使用filetype:htm 查询到的网页
动态网址:内容存于数据库中,根据要求显示内容,URL中以 ? # & 显示不同的参数,如:news.php?lang=cn&class=1&id=2
动态、静态、伪静态之间的利与弊(新)
动态网址
首先,动态网址目前对于Google来说,“不能被抓取”的说法是错误的,Google能够很好的处理动态网址并顺利抓取;其次“参数不能超过3个”的说法也不正确,Google能够抓取参数超过3个的动态网址,不过,为了避免URL太长应尽量减少参数。
其次,动态网址有其一定的优势,以上面所说的 news.php?lang=cn&class=1&id=2 为例,网址中的参数准确的告诉Google,此URL内容语言为cn、隶属于分类1、内容ID为2,更便于Google对内容的识别处理。
最后,动态网址应尽量精简,特别是会话标识(sid)和查询(query)参数,容易造成大量相同页面。
静态网址
首先,静态网址具有的绝对优势是其明晰,/product/nokia/n95.html和/about.html可以很容易被理解,从而在搜索结果中可能点击量相对较高。
其次,静态网址未必就是最好的网址形式,上述动态网址中说到,动态网址能够告诉Google一些可以识别的参数,而静态网址如果文档布置不够恰当(如:过于扁平化,将HTML文档全放在根目录下)及其他因素,反而不如静态网址为Google提供的参考信息丰富。
最后,樂思蜀觉得Google此文中是否有其隐藏含义?“更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。”虽然所说的是网站,但在Google系统中是否同样存在这样的问题呢?
伪静态网址
首先,伪静态网址不能让动态网址“静态化”,伪静态仅仅是对动态网址的一个重写,Google不会认为伪静态就是HTML文档。
其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上。
最后,伪静态有很大潜大危险,最好在对网站系统、网站结构、内容分布、参数意义熟悉的情况下使用。
在写伪静态规则时,应保留有价值的参数,不要将有价值的参数全部精简掉,如前面例子中的 news.php?lang=cn&class=1&id=2 最好重写为 news-cn-class1-id2.html,而不是过份精简重写为 news-2.html。
再就是伪静态中一定不能包含会话标识(sid)和查询(query)参数,/product.asp?sid=98971298178906&id=1234 这样的动态网址,其中的sid本来Google能够识别并屏蔽,但如果重写为 /product/98971298178906/1234,Google不但无法识别,还在整站中造成无限重复页面(每个会话都会产生一个新的会话ID)。
我们应该选择伪静态还是真静态
2、使用真静态可能将导致硬盘损坏并将影响论坛性能
3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
4、最重要的一点,我们要静态是为了SEO
所以:
1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
2、既然真伪静态的效果一样,我们就可以选择伪静态了。
3、但是伪静态大量使用会造成CPU超负荷。
4、所以我们只要不大量使用就可以了。
5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
7、谢谢大家耐心看我写的文章。
8、有何不解的地方或是有不同的看法欢迎提出
关于伪静态和真静态的评论
读取单个html+图片Flash等附件就可以实现的目的,何苦要读数据库又要读php缓存文件又要重新整合数据输出再+图片Flash等附件这么大费周章呢?CMS首页不需要很多的互动的,论坛那一套不应该拿到这里来用,相反应该更多考虑的是:美观!兼容!信息的直观!性能!还有稳定!
在转一个 php伪静态的实现四法:
10
11
12
13 {
14
15
16
17
18 }
19
20
21
22
23
24
25
26
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 }
30
31
10 echo $script_name."<br>";
11 $nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1);
12 echo $nav."<br>";
13 $nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//这句是去掉尾部的.html或.htm
14 echo $nav."<br>";
15 $vars = explode("/",$nav);
16 print_r($vars);
17 echo "<br>";
18 for($i=0;$i<Count($vars);$i+=2){
19 $_GET["$vars[$i]"]=$vars[$i+1];
20 }
21 return $_GET;
22 }
23 mod_rewrite();
24 $year=$_GET["year"];//结果为'2006'
25 echo $year."<br>";
26 $action=$_GET["action"];//结果为'_add'
27 echo $action;
28 ?>
29
10 $softid
11 }else die("Path:Error!");
12 //相当于soft.php?gid=1&sid=100&softid=8630
13 }else die('Path:Nothing!');
14 ?>
15