分页与URL重写
对一系列的网页编排页码往往很重要,这些页的URL地址也要重写。这里列出这个规则仅仅是为了吊吊胃口(如果您不明白请参考上面的建议链接工厂):
RewriteRule ^products/.*-c([0-9]+)/page-([0-9]+)/?$ category.php?category_id=$1&page_num=$2 [L]
重写图像和流媒体
有人推荐不仅在HTML文件中使用关键词,还要在图像和流媒体文件中也嵌入关键词。特别是如果经营的是图像和流媒体发行的行为,这将更加重要。
对特定应用,可能发现使用合适的物理文件名更为容易。然而,如果解决方案复杂一点,重写图像文件的URL地址可能更有意义。在此的重写只要做一点点的工作。全部的文件都应该放在一个目录中,使用唯一的编号作为文件名,比如(“1”,“2”,“3”),没有扩展名。请求将会直接发给文件系统上的物理文件,而不是通过PHP应用程序。这样做的原因是因为在WEB服务器上使用扩展名的流媒体,对PHP脚本不容易实现。URL地址通过前面示例中的PHP函数生成。
(一)从下载的代码中,将media文件夹复制到seophp文件夹中。于是,在seophp/media文件夹下,会有名为1、2、3、4、5的5个文件。这些都是jpeg图像文件。
(二)在.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]+)\.html$ /product.php?category_id=$1&product_id=$2 [L]
RewriteRule ^catalog.html$ /catalog.php {L}
RewriteRule ^cartoons.html$ /cartoons.php [L]
RewriteRule ^.*-M([0-9]+)\..*$ /media/$1 [L]
(三)在seophp文件夹下创建新文件cartoons.php,并添加如下代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN" http://www.w3.org/TR/xhtml111/DTD/xhtml111.dtd>
<html>
<head><title>URL Rewriting Media Files</title>
</head>
<body>
<img src="http://seophp.example.com/Tweety-M1.jpg" alt="Tweety" />
<img src=http://seophp.example.com/Toy-Story-M2.jpg alt="Toy Story">
<img src=http://seophp.example.com/Tweety-Sylvester-M3.jpg alt="Tweety $ Sylvester">
<img src=http://seophp.example.com/Mickey-m4.jpg alt="Mickey" />
<img src=http://seophp.example.com/minnie-m5.jpg alt="Minnie">
</body>
</html>
(四)加载http://seophp.example.com/cartoons.html ,可以看到5幅图片。
(五)此时,图像重写工作良好。然而,为了在真实网站中实现它,需要扩展URL工厂来建立图像文件名。打开URL工厂文件url_factory.inc.php,并添加以下函数:
function make_media_url($id,$name,$extension)
{
$clean_name=_prepare_url_text($name);
$url=SITE_DOMAIN."/".$clean_name.'-M'.$id.'.'.$extension;
return $url;
}
(六)打开cartoons.php,并将硬编码文件名修改为调用函数make_media_url(),如下所示:
<?php
require_once 'include/url_factory.inc.php';
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN" http://www.w3.org/TR/xhtml111/DTD/xhtml111.dtd>
<html>
<head><title>URL Rewriting Media Files</title>
</head>
<body>
<img src="<?php echo make_media_url(1,"Tweety","jpg"); ?>" alt="Tweety" />
<img src="<?php echo make_media_url(2,"ToyStory","jpg"); ?>" alt="Toy Story">
<img src="<?php echo make_media_url(3,"Tweety & sylvester","jpg"); ?>" alt="Tweety $ Sylvester">
<img src="<?php echo make_media_url(4,"Mickey","jpg"); ?>" alt="Mickey" />
<img src="<?php echo make_media_url(5,"Minnie","jpg"); ?>" alt="Minnie">
</body>
(七)再次加载http://seophp.example.com/cartoons.html。希望得到跟以前一样的链接和结果。
除了Apache将图象URL地址重写至硬盘上的物理文件名外,这个练习与前面的练习非常类似。这次正则表达式看起来有点复杂,但其实它跟前面曾经处理过的并没有很大区别。
RewriteRule ^.*-M([0-9]+)\..*$ /media/$1 [L]
规则匹配任何后面跟随“-M”的随机字符集(^.*-M),再后面跟着一组被保存至$1的数字([0-9]+)。接下来是一个字面意义的点——“\.”,然后再是随机字符集——“(.*)”。
换句话说,规则匹配类似于“Some-Media-Name_Mn.some-extension”的URL地址,并将其直接重写至一个物理文件“/media/n”。
已经添加至URL工厂的这个新函数,将生成这种修饰过的URL地址。当想用搜索引擎友好的图像文件时,即可以从头开始给它们合适的命名,也可以使用URL工厂,与重写规则一起来确保整个网站的一致性。
</html>