|

- UID
- 675
- 帖子
- 87
- 精华
- 2
- 积分
- 305
- 威望
- 392
- 阅读权限
- 10
- 在线时间
- 26 小时
- 注册时间
- 2008-9-23
|
楼主
发表于 2008-9-25 11:26
| 只看该作者
在Win服务器下永久链接伪静态的方法
因为服务器是使用的Windows2003,想使用Rewrite配合cos-html-cache2.0 wordpress静态化插件生成静态页面,这样也可以摆脱Wordpress永久链接前面的index.php。
可恨的是我在服务器上配置Rewrite后,启用cos-html-cache2.0 无法生成静态页面。
只好找老G帮忙,输入词条,搜到N多关于永久链接的文章。
最后确定目标,要实现无Rewrite能设置不带index.php的永久链接或者能生成静态页面更好。
下面总结两种已成功实现的方案:
第一种方案:
不需要第三方插件cos-html-cache支持,利用服务器有自定义404错误页面的功能解决问题,但前提是你的服务器或者主机有自定义404错误页面的功能。如果是服务器那肯定可以支持,如果是虚拟主机,需你的服务器供应商提供自定义404错误页面选项。
你只需创建一个404错误页面,并且写入下列4行代码即可简单优雅的实现无插件完美支持windows iis主机的永久固定链接的伪静态化地址格式。- <?php
- header("HTTP/1.1 200 OK");
- $ori_qs = $_SERVER['QUERY_STRING'];
- $pattern = '/[^;]+;[^:]+:\/\/[^\/]+(\/[^\?]*)(?:\?(.*))?/i';
-
- preg_match($pattern, $ori_qs, $matches);
- $_SERVER['PATH_INFO'] = $matches[1] . '?' . $matches[2];
- $_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
- $query_args = explode('&', $matches[2]);
- unset($_GET);
- foreach ($query_args as $arg)
- {
- $the_arg = explode('=', $arg);
- $_GET[$the_arg[0]] = $the_arg[1];
- }
-
- include('index.php');
- ?>
复制代码 具体设置步骤:
- 新建一个记事本,在里面写入上面代码,保存,连同txt格式重新命名为wp-404-handler.php。将wp-404-handler.php上传到网站根目录。
- 设置404自定义错误指向wp-404-handler.php,一般来说,绝大多数服务器控制面板均提供该选项。
- 进入wordpress管理后台,设置(Options)-永久链接(Permalinks),你就当自己的主机是linux主机使好了,任意、随便设置自己喜欢的伪静态地址格式及静态地址后缀。
例如:
/y%year%/%post_id%.html
/%year%/%monthnum%/%post_id%.html
/%year%/%monthnum%/%postname%.html
我用的格式是:/%year%/%monthnum%/%postname% 第二种方案:
无Rewrite用cos-html-cache实现静态化
要求:使用下载cos-html-cache 1.1
具体设置步骤:
- 下载cos-html-cache 1.1 ,解压,传到/wp-content/plugins/目录,在后台”插件”中启用”cos-html-cache”
- 在”设置”永久选项中,自定义结构修改静态化的规则,例如/html/%postname%/
- 下载404代码,保存为404.asp。并且上传到网站的跟目录,设置404自定义错误指向404.asp
- 在后台cos-html-cache 管理选项生成静态页面,就可以实现目的了。
总结:
第一种方案比较简单,可以显现无index.php的永久链接。第二种方案较复杂点,但是可以生成静态页面,且可以实现无index.php的永久链接。
提示:总结这两种方案后,Chris.Ro及时告知我在第一种方案中的404错误页面代码会给google收录和带Query String的链接造成问题。所以我参照他的文章已经修改了代码,现在对收录和带Query String的链接都没有影响。
Chris.Ro说的WP官方给出的方案原文是在这里,如果你有兴趣可以去看看:Pretty Wordpress Permalinks on IIS
还补充一定我遇到的问题,如果你是在服务器上安装wordpress,同时你还安装了DEDECMS的话,可能会造成几个网站页面“互串”的现象,简单描述就是输入的是你的网址,显示的是另一个网站的内容,我猜测是因为在wp-404-handler.php里面include(’index.php’)包含的index.php跟DEDECMS的发生冲突。所以我的方法是把wp-404-handler.php放到/wp-content/下,然后修改include(’index.php’)为include(’../index.php’),在自定义404错误页面那的url设置成
/wp-content/wp-404-handler.php。这样就避免了“互串”的现象。
最后感谢Chris.Ro对我这篇总结性的文章提出的帮助 |
|