一、config.inc.php文件中添加代码。这些全局关联数组定义了一行产品和种类,模拟了一个真实的产品数据库。下面将需要使用PHP代码,从这些数组中获得数据来自动生成URL地址的多关键词版本。
<?php
define('SITE_DOMAIN','http://www.edo2008.com');
$GLOBALS['products']=array("45"=>"Belt Sander",
"31"=>"Link Juice",
"42"=>"AJAX PHP Book");
$GLOBALS['categories']=array("12"=>"Carpenter's Tools",
"6"=>"SEO Toolbox",
"2"=>"Friend's Shed");
?>
二、创建include/url_redirect.inc.php,并键入以下代码:
<?php
require_once 'url_factory.inc.php';
function fix_category_product_url(){
$proper_url=get_proper_category_product_url();
if(SITE_DOMAIN.$_SERVER['REQUEST_URI'] != $proper_url){
header('HTTP/1.1 301 Moved Permanently');
header('Location:'.$proper_url);
exit();
}
}
function get_proper_category_product_url(){
$product_id=$_GET['product_id'];
$category_id=$_GET['category_id'];
$product_name=$GLOBALS['products'][$product_id];
$category_name=$GLOBALS['categories'][$category_id];
$proper_url=make_category_product_url($category_name,$category_id,$product_name,$product_id);
return $proper_url;
}
?>
三、在product.php中添加这些行:
<?php
require_once 'include/url_redirect.inc.php';
fix_category_product_url();
echo 'You have selected product #'.$_GET['product_id'].' from category #'.$_GET['category_id'];
?>
四、在WEB浏览器中加载 http://seophp.example.com/product.php?category_id=2&product_id=42,将会看到在URL地址中发生了一些魔术般的效果!
首先,开始修改product.php来包含对url_redirect.inc.php的引用,并随后调用了它的fix_category_product_url()函数。
<?php
require_once 'include/url_redirect.inc.php';
fix_category_product_url();
?>
每当一个产品页面被加载时,函数fix_category_product_url()被执行,验证用于到达页面的URL地址是否是“正确”的。那个URL地址的“正确”版本是用get_proper_category_product_url()函数组成的:
function fix_category_product_url(){
$proper_url=get_proper_category_product_url();
关于get_proper_category_product_url()函数的工作过程的稍后讨论。现在只假设变量$proper_url包含的值类似于“http://seophp.example.com/Products/Friends-Shed-C2/AJAX-PHP-Book-P42.html”。一旦获得了这个“正确”的URL地址,就可以验证访问者使用这个URL地址一定能达到匹配它的产品页面:
if(SITE_DOMAIN.$_SERVER['REQUEST_URL'] != $proper_url)
{
参数$_SERVER['REQUEST_URL']返回用于达到页面的URL地址。比如,如果浏览 http://seophp.example.com/product.php?category_id=2&product_id=42,那么参数$_SERVER['REQUEST_URL']将返回“/product.php?category_id=2&product_id=42”。只要把这个值与域名拼接,就可以获得完整的URL地址。
如果不匹配,就可以通过设置必要的报头值,来完成用301重定向到正确的URL地址,报头值为:
if(SITE_DOMAIN.$_SERVER['REQUEST_URL'] != $proper_url)
{
header('HTTP/1.1 301 Moved Permanently');
header('Location:'.$proper_url);
exit();
}
}
现在来看函数get_proper_category_product_url()。这个函数首先加载由变量$_GET中的URL地址传递而来的产品和种类ID。
function get_proper_category_product_url{
$product_id=$_GET['product_id'];
$category_id=$_GET['category_id'];
然后将从虚拟数据库中读取产品和种类的名称:
$product_name=$GLOBALS['products'][$product_id];
$category_name=$GLOBALS['categories'][$category_id];
虚拟数据库由两上全局关联数组构成,它们把ID与名称相关连。这些都在config.inc.php中定义,并模拟了一个真实的产品数据库。这个例子使用了关联数组来使一切忌变得简单。然而,在真实产品情景中,需要一个真正的数据库。
$GLOBALS['products']=array("45"=>"Belt Sander",
"31"=>"Link Juice",
"42"=>"AJAX PHP Book");
$GLOBALS['categories']=array("12"=>"Carpenter's Tools",
"6"=>"SEO Toolsbox",
"2"=>"Friend's Shed");
有了这些数据之后,get_proper_category_product_url()接着调用URL工厂中的函数make_category_product_url(),来创建多关键词URL地址:
$proper_url = make_category_product_url($category_name,$category_id,$product_name,$product_id);
最后,函数返回该值:
return $proper_url;