真正理想的快乐之源在这里!这种方式的URL重写有点复杂,并且需要采取更多的策略。在重写数字化URL时,从一个类拟“/products/c5/p9.html”的URL地址中提取产品和种类ID,再将URL地址重写为“product.php?category_id=5&product_id=9”,这些相对来说比较容易。
一个多关键词URL地址不是必须包含任何ID的。请看这个:
http://www.example.com/products/tools/super_drill.html
这个URL地址指向名为“Tools”的种类中一个名为“Super Drill”的产品。显然,如果想支持这种类型的URL地址,就需要某种机制找到URL地址所指向的种类ID和产品ID。
可以想到的一种解决方案是:在产品和种类表中添加一列,将这种字符串与它们的ID相关联。对于这样的请求,可以在种类和产品信息表中查询信息,获得并使用它们的ID。
然而,我们建议一种更容易的解决方案。它更容易实现,并且仍然能保持多关键词URL地址的好处。请看下面的URL地址:
http://www.products.com/products/super-drill-p9.html
http://www.products.com/products/tools-c5/super-drill-p9.html
这些URL地址中都包含关键词。但是,我们还在这些URL地址中暗藏了ID。这种方法不但不会令人的眼睛不适,而且也不会转移对重要关键词的注意。
在第一个URL地址中,重写规则能很容易地提取绑定在产品名称后面的数字(-p9),并且忽略URL地址的其余部分。对于第二个URL地址,重写规则能提取种类ID(-c5)和产品ID(-p9),并且能使用这些数字创建一个类似“product.php?category_id=5&product_id=9”的URL地址。
第一个参数的多关键词URL地址的重写规则类似这样:
RewriteRule ^products/.*-p([0-9]+)\.html?$ /product.php?product_id=$1 [L]
带两个参数的多关键词URL地址的重写规则类似这样:
RewriteRule ^products/.*-c([0-9]+)/.*-p([0-9]+)\.html$ /product.php?category_id=$1&product_id=$2 [L]
重写多关键词URL地址
(一)修改seophp文件夹中的.htaccess文件,代码如下所示:
RewriteEngine On
RewriteRule ^products/c([0-9]*)/p([0-9]*)\.html$ /product.php?category_id=$1&product_id=$2 [L]
RewriteRule ^products/.*-c([0-9]+)/.*-p([0-9]+)\.html$ /product.php?category_id=$1&product_id=$2 [L]
(二)加载http://seophp.example.com/products/tools-c5/super-drill-p9.html。
现在在.htaccess文件中有两上规则,并且它们运行良好!
匹配URL地址的新规则是用字符串“products/”开始的,然后在“-c”之前包含零个或多个字符(.*)。这被表示为“products/.*-c”。接下来的字符必须是一个或多个数字,它们作为一个整体被保存至变量$1,因为表达式被写在括号中:“([0-9]+)”。URL地址中的第一个变量$1就是这种类ID。
在种类ID之后,URL地址必须包含一个斜杠,然后是零个或多个字符(.*),之后是“-p”。这些被表示为“/.*-p”。然后紧接着的另一个被捕获的数字组“([0-9]+)”,用来提取产品ID,它就是变量$2。正则表达式的最后是“\.html$”,它指明了URL地址要以“.html”结尾。
两个被提取的值$1和$2被用来创建新的URL地址“/product.php?category_id=$1&product_id=$2”。