返回列表 回复 发帖

在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主机的永久固定链接的伪静态化地址格式。
  1. <?php
  2. header("HTTP/1.1 200 OK");
  3. $ori_qs = $_SERVER['QUERY_STRING'];
  4. $pattern = '/[^;]+;[^:]+:\/\/[^\/]+(\/[^\?]*)(?:\?(.*))?/i';

  5. preg_match($pattern, $ori_qs, $matches);
  6. $_SERVER['PATH_INFO']    = $matches[1] . '?' . $matches[2];
  7. $_SERVER['REQUEST_URI']  = $_SERVER['PATH_INFO'];
  8. $query_args              = explode('&', $matches[2]);
  9. unset($_GET);
  10. foreach ($query_args as $arg)
  11. {
  12.     $the_arg = explode('=', $arg);
  13.     $_GET[$the_arg[0]] = $the_arg[1];
  14. }

  15. include('index.php');
  16. ?>
复制代码
具体设置步骤:
  • 新建一个记事本,在里面写入上面代码,保存,连同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对我这篇总结性的文章提出的帮助
比较的复杂哈!
分享技术,记录生活!
欢迎光临Xiaorsz's Blog
这个一定要顶,广大WIN的福音啊
其实我也写过一个方法,可以参考:
http://www.dreamfreeblog.com/wor ... indows-iis-261.html
我的就是win主机
具体效果你可以看我的博客
楼主,用这个以后,如果访问到不存在的页面,就会显示一段源码,能不能改进一下,顺便起到404页面的作用,如果没有该页面就跳转到指定页面
我前天买了一款国内的Win主机,给的条件是绑定4个域名,其中一个可以绑定到子文件夹下。

因此,我就把我在国外的免费空间上的博客给搬回来了。我的免费博客使用的是co.cc免费域名。

在设置co.cc域名的A记录之后,它没有立刻生效,所以我使用系统的二级域名,也就是:http://anydz.com/51blog,这样,通过设置404.php(放到了根目录下面)页面,成功实现了伪静态

后来co.cc域名的设置生效了,我就把站点的地址从上面http://anydz.com/51blog修改为了我的co.cc域名:http://51blog.co.cc/,但此时因为空间服务器的子目录51blog和根目录www脱离关系了(貌似),所以出现错误页面时访问不了根目录下的404.php了,只访问了系统为51blog文件夹指定的默认的404页面。所以伪静态失败。

然后我就重新在子目录里面上传了404.php文件,并请空间商帮忙把错误页面从系统默认的改成了我的404.php文件,可是这是如果访问的地址出现错误的话,浏览器直接把404.php页面的内容当作文本文件显示了出来,并没有解释执行。

我想请问,这到底是怎么回事呢?我现在该怎么办呢。。
返回列表