欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

浅谈PHP实现伪静态_PHP教程

程序员文章站 2022-05-22 18:26:51
...

/*******************
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.BkJia.com/kf/201108/100056.html


友好URL的实现(吐血推荐)http://www.BkJia.com/kf/201006/49208.html

PHP实现伪静态化页面的具体实现方式 http://www.BkJia.com/kf/201108/100058.html

PHP伪静态与防注入 http://www.BkJia.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。如图:

浅谈PHP实现伪静态_PHP教程

2.在http.conf里面查找Options FollowSymLinks,将后面的AllowOverride None改成AllowOverride All。
这个时候兵分两路,有http.conf权限的可以自己在http.conf后面添加url rewrite规则


RewriteEngine On
RewriteRule ^(.*)/([0-9]{1,}).html$ $1/page.php?id=$2

第二路就只好在代码根目录建立.htaccess文件,这个文件建立比较简单,有3种方法,最简单的当然是建立1.htaccess然后记事本打开另存为.htaccess,另外就是cmd下rename和ftp软件修改。
3.rewrite规则
看个例子就懂了

RewriteEngine On
RewriteRule ^(.*)/([0-9]{1,}).html$ $1/page.php?id=$2

$是终止符,前面写个正则表达式,$1获取第一个子模式(小括号里面的东东),$2获取第二个子模式东东。
友情提示 ^是开头,不要忘记加了
如果有2个参数,也很简单,自行处理。
也就是说浏览器里面显示的如果是4.html(你的文件里面的链接写成.html的)的话,实际调用的是page.php?id=4,这样浏览器的输入栏都是html,达到了伪静态。
当然你改写不同正则,显示的url当然就不同了,随你喜欢的该。
遇见多行的话不要妄自加分号。如下才是对的:

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


综述就是网址重写引擎和指定一些重写规则.,尝试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.部分代码指导:

echo "";
$i=$row['id'];//数据库表insun4中的id列,为了。。。。
echo " ".$row['title']." ";
//echo " ".$row['title']." ";
//echo " ".$row['description']." ";
echo " ".$row['description']." ";
echo "";
?>

include 'config.php';
set_time_limit(0);//防止超时显示错误。
mysql_query("set names'gbk'");//utf8
//$url = "http://www.jj59.com/";
$gid = $_GET['id'];
$query="select * from insun4 where id = $gid" ;//用like选择性输出。where link like'http://www.jj59.com/yuanchuang/%'
//echo $query;
$queryresult=mysql_query($query) or die("查询数据失败");//执行查询
//echo var_dump($queryresult);

while($row = mysql_fetch_array($queryresult)){
echo ($row['content'])."
";
}
?>


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


二,看到网上有2-3个方法,都是写个Url_rewrite函数,然后require的,感觉不好就不推荐大家了,大家可以去搜索下。
一般都是借助于apache,nginx,htaccess等,很少用php来实现url的静态化,用php来实现静态化比较麻烦。


如果出现下面这样,说明你没配置好。