实现url的伪静态化。(phpcms 2008的代码可能有些差异,但完全可以参照本方案类推)
一、修改url重写规则:
网站根目录下.htaccess文件添加如下配置
RewriteRule ^tag/(.*)$ index.php?m=content&c=tag&a=lists&tag=$1&%1
RewriteCond %{QUERY_STRING} ^(.*)$
二、修改所有访问Tag的链接:全局搜索 index.php?m=content&c=tag&a=lists&tag=
整体替换为:tag/ (建议一个个手动替换,改动地方不多)
三、修改处理Tag处的逻辑代码:
phpcms/modules/content/tag.php lists函数开头部分修改如下(array使用[]取值貌似老版本php不支持,这里已改使用current,next函数)
$uri = trim($_SERVER['REQUEST_URI']);
$tag = current(explode('?', next(explode('tag/', $uri))));
$tag = urldecode($tag);
if (empty($tag)) {
$this->init();
exit;
}
$tag = safe_replace(addslashes($tag));
修改起来很简单,兼顾含特殊字符的tag,测试OK。附注:url对tag内容进行了一次urlencode,但是url重写中自动对其进行了urldecode,然后代码中如果使用_GET["tag"]则会再进行一次urldecode,这样特殊字符就进行了二次解码原本内容失效。有人建议url中二次encode内容,当然可以解决,但是不够好,因为这样的话url中是一连串不友好的UTF-8编码字符串,不能辨识tag内容。最后本帖的解决方案仍然是一次encode,然后处理时不使用_GET["tag"],而是手动解析$_SERVER['REQUEST_URI']。
此外,分页测试仍然OK,大家可以放心使用。