浅谈PHP实现伪静态
/*******************
Title:浅谈PHP实现伪静态
Author:insun
Blog:http://yxmhero1989.blog.163.com
Reference:
php实现url伪静态化 http://blog.78999.org/php_sql_asp/php-rewrite.html
php 伪静态(url rewrite)apache配置http://hi.baidu.com/%B9%D6%CA%AF/blog/item/2659b6af548923d57cd92ab9.html
三种实现PHP伪静态页面的方法:http://www.zzzyk.com/kf/201108/100056.html
友好URL的实现(易做图推荐)http://www.zzzyk.com/kf/201006/49208.html
PHP实现伪静态化页面的具体实现方式 http://www.zzzyk.com/kf/201108/100058.html
PHP伪静态与防注入 http://www.zzzyk.com/Article/201108/100059.html
Php参数传递以及php获取url参数之后的较合理安排 http://hi.baidu.com/wd1314521/blog/item/3af604822f1938b70df4d2e3.html
php实现伪静态化页面的两种方法(包括两种url重写的方法 http://hi.baidu.com/newyorkmen/blog/item/f998131ae4121b0d34fa4167.html/cmtid/6becf7c0d5fd6d38e4dd3b08 PHP页面实现静态化讲解和详细代码 http://hi.baidu.com/newyorkmen/blog/item/f387e3b723dddac437d3ca66.html
*/
最近在某公司实习,用php爬虫抓取网站页面,存到数据库,然后自己写个网站调用数据库,然后进行SEO,要求采集、远程资料本地化,伪静态,关键字优化,无死链无孤岛;做完以后就可以进入项目组了。
PHP实现伪静态实际是为了SEO(Search Engine Optimization搜索引擎优化),也就是说像google和百度之类的spider不喜欢动态的页面,所以你显示的时候就以.html或者目录之类的表现,其实在服务器端是php文件。也就是说搜索引擎不喜欢/page.php?id=4这样的页面,而是喜欢/4.html这样的页面,对其非常友好(有利于收录),当然你不会直接弄出N个html页面吧。
一。那么最简单的方法
Apache+PHP下实现URL重写(伪静态)
1。检查apache是否支持mod_rewrite
在apache的httpd.conf里面查找LoadModule rewrite_module modules/mod_rewrite.so,去掉其前面的#(如果有的话,也就是取消注释)Linux下建议使用Xampp安装包,里面的LoadModule基本都已经被取消注释了,所以一般不需要改动。
然后利用phpinfo()查看环境配置,是否支持mod_rewrite。如图:
2.在http.conf里面查找Options FollowSymLinks,将后面的AllowOverride None改成AllowOverride All。
这个时候兵分两路,有http.conf权限的可以自己在http.conf后面添加url rewrite规则
如
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/([0-9]{1,}).html$ $1/page.php?id=$2
</IfModule>
第二路就只好在代码根目录建立.htaccess文件,这个文件建立比较简单,有3种方法,最简单的当然是建立1.htaccess然后记事本打开另存为.htaccess,另外就是cmd下rename和ftp软件修改。
3.rewrite规则
看个例子就懂了
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/([0-9]{1,}).html$ $1/page.php?id=$2
</IfModule>
$是终止符,前面写个正则表达式,$1获取第一个子模式(小括号里面的东东),$2获取第二个子模式东东。
友情提示 ^是开头,不要忘记加了
如果有2个参数,也很简单,自行处理。
也就是说浏览器里面显示的如果是4.html(你的文件里面的链接写成.html的)的话,实际调用的是page.php?id=4,这样浏览器的输入栏都是html,达到了伪静态。
当然你改写不同正则,显示的url当然就不同了,随你喜欢的该。
遇见多行的话不要妄自加分号。如下才是对的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/([0-9]{1,}).html$ $1/page.php?id=$2
RewriteRule ^(.*)/index.html$ $1/index.php
RewriteRule ^(.*)/wenzhang.html$ $1/wenzhang.php
RewriteRule ^(.*)/gushi.html$ $1/gushi.php
RewriteRule ^(.*)/sanwen.html$ $1/sanwen.php
RewriteRule ^(.*)/zawen.html$ $1/zawen.php
RewriteRule ^(.*)/shige.html$ $1/shige.php
RewriteRule ^(.*)/riji.html$ $1/riji.php
RewriteRule ^(.*)/xiaoshuo.html$ $1/xiaoshuo.php
RewriteRule ^(.*)/contact.html$ $1/contact.php
</IfModule>
.,尝试Faking URL Suffix(伪造URL后缀),看起来很静态化,提高了安全性和SEO友好度。综述就是网址重写引擎和指定一些重写规则
4.重启apache。
windows的httpd.conf很好找,在conf目录(我指的是你如果没用集成包的话)
Linux在opt/lampp/etc目录里面有httpd.conf(一般linux下推荐用Xampp按照包,安装在opt目录)
同样进行上面工作restart一下就ok
login as: root
Server refused our key
root@XXXXX.com's password:
Last login: Thu Jul 21 14:26:26 2011 from 112.65.219.75
[root@XXXXX ~]# who
root pts/0 2011-07-21 14:32 (112.65.219.75)
[root@XXXXX ~]# /opt/lampp/lampp restart
Stopping XAMPP for Linux 1.6.4...
XAMPP: Stopping Apache with SSL...
XAMPP: Stopping MySQL...
XAMPP: Stopping ProFTPD...
XAMPP stopped.
Starting XAMPP for Linux 1.6.4...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.
稍等就行了。
5.部分代码指导:
<?php
echo "<tr>";
$i=$row['id'];//数据库表insun4中的id列,为了。。。。
echo "<td> <a href=\"$i.html\">".$row['title']."</a></td>";
//echo "<td> <a href=\"page.php?id=$i\">".$row['title']."</a></td>";
//echo "<td> <a href=\"page.php?id=$i\">".$row['description']."</a></td>";
echo "<td> <a href=\"$i.html\">".$row['description']."</a></td>";
echo "</tr>";
?>