IIS下wordpress永久链接(PermaLink)不用rewrite使用404页面实现

如果是在Linux主机下,主机支持mod_rewrite的话,那就不需要费那么大的劲,但是一部分WordPress是安装在Windows主机上的,要想使伪静态就有点麻烦。我在网上找了很多wordpress的rewrite规则,但是都不敢用。wordpress又不提供标准rewrite规则,真是麻烦。

在网上找wordpress的404页面使用的时候居然找到一个教程,原理是利用404错误页面重写URL,达到wordpress的伪静态。这样就可以在IIS下实现漂亮的URL。

第一,建一个404.php文件在你的WordPress根目录中,文件内容如下:
<?php
$qs = $_SERVER[‘QUERY_STRING’];
$_SERVER[‘REQUEST_URI’] = substr($qs, strpos($qs, ‘:80′)+3);
$_SERVER[‘PATH_INFO’] = $_SERVER[‘REQUEST_URI’];
include(’index.php’);
?>

第二,设置站点404错误页面,独立服务器的可以直接操作IIS,如果是虚拟主机的,现在大部分虚拟主机控制面板都支持设置404错误页面,你把地址设置为”/404.php”。
自己管理iis的,可以通过网站属性-自定义错误来设置404错误页面,不过也要用绝对地址”/404.php”。
第三,登陆你的wordpress后台,设置->永久链接,结构可以任意设置,如:
/%year%/%monthnum%/%postname%/

问题:
不支持中文,postname和tag最好是英文的,中文的还是无法访问。中文的tag可以去设置一下tag slug

在网上查一些资料,才明白原因。原来带有中文的postname和tag的url其实是属于gbk编码,但是wordpress是utf-8编码。所以在404页面中要把网址转码称utf-8,这样就能完美解决404页面实现rewrite的不支持中文问题。

渴慕晨光使用的404页面是:404错误页面

IIS主机永久链接去index.php简约方法

之前写日子用Dean’s Permalinks Migration插件更改了博客的永久链接,可是由于是IIS主机,必须得在永久链接里保留index.php,无疑加深了一个不必要的层次结构。在网上搜索了N多次,结果发现用第三方插件可以实现去除index.php,即可以用ISAPI_Rewrite组件实现类似linux主机apache环境的mod_rewrite的url rewrite地址重写功能,但必须要拥有服务器上运行该组件的权限,因此就放弃了。

又过数日,在BO-BLOG里面发现上下篇日志是分类里面的上下篇,于是就上网搜索wp能不能也这么做。结果就搜索到了一篇win iis虚拟主机不需任何wordpress插件,不需要第三方组件完美的wordpress伪静态设置方法。实现非常简单,创建的新文件我放在了跟目录。当然,前提条件是服务器提供商的控制面板有自定义404错误页面的选项。

你只需创建一个404错误页面,并且写入下列4行代码即可简单优雅的实现无插件完美支持windows iis主机的永久固定链接的伪静态化地址格式。去掉网页地址中的index.php!

<?php
$qs = $_SERVER[‘QUERY_STRING’];
$_SERVER[‘REQUEST_URI’] = substr($qs, strpos($qs, ‘:80′)+3);
$_SERVER[‘PATH_INFO’] = $_SERVER[‘REQUEST_URI’];
include(’index.php’);
>

这样即可固定REQUEST_URI和PATH_INFO参量并且包括进去index.php,剩下的将交给wordpress完成任务(说实话,这参数定义代码偶也不清楚,依葫芦画瓢即可)。
具体设置步骤:

1.新建一个记事本,在里面写入上面代码,保存,连同txt格式重新命名为wp-404-handler.php。
2.设置404自定义错误指向wp-404-handler.php,一般来说,绝大多数服务器控制面板均提供该选项。
3.进入wordpress管理后台,设置(Options)-永久链接),你就当自己的主机是linux主机使好了,任意、随便设置自己喜欢的伪静态地址格式及静态地址后缀。
4.Enjoy!