/*******************
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。如圖:
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
[email protected]'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>";
?>
<?php
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'])."<br>";
}
?>
<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>
二,看到網上有2-3個方法,都是寫個Url_rewrite函數,然後require的,感覺不好就不推薦大家了,大家可以去搜索下。
一般都是借助於apache,nginx,htaccess等,很少用php來實現url的靜態化,用php來實現靜態化比較麻煩。
如果出現下面這樣,說明你沒配置好。