最近在折腾Windows VPS,并且使用IIS 7搭建了网站。使用Wordpress一般都会启用伪静态,wordpress自带IIS的伪静态规则,但是被我发现了一个很严重的问题,那就是URL Rewrite不支持中文,这样中午的标签和中文的分类目录(没指定别名)点击后就会404了。
在网络上搜索了一阵后终于找到了一个比较完美的方案,因为传播比较广,已经找不到原作者了,但还是向原作者表示感谢。
1.创建chineseurl.php文件
首先我们要在Wordpress安装目录下创建chineseurl.php文件,为下一步做准备。
文件内容如下:
<?php
// IIS Mod-Rewrite
if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL'];
}
// IIS Isapi_Rewrite
else if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}
else
{
// Use ORIG_PATH_INFO if there is no PATH_INFO
if ( !isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']) )
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
// Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
if ( isset($_SERVER['PATH_INFO']) ) {
if ( $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'] )
$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
else
$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO'];
}
// Append the query string if it exists and isn't null
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) {
$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
}
require("index.php");
?>
2.配置web.config文件
web.config文件是IIS 7中网站的额外配置文件,当然伪静态规则也是写在这里的。
在使用伪静态前先检查下有没有安装URL Rewrite模块,如果没有安装是无法使用的。
如果文件夹下没有web.config文件,最好是使用wodpress生成一下配置文件。即“设置-固定链接”不用修改直接保存就好了。
生成后在web.config中
<rewrite><rules>....</rules></rewrite>
中的
<rule name="wordpress" patternSyntax="Wildcard">
上插入专门的中文重写规则即可:
<rule name="ChineseURL" stopProcessing="true">
<match url="^(tag|category)/(.*)$" />
<action type="Rewrite" url="chineseurl.php" />
</rule>
插入完成后应该是像这样:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ChineseURL" stopProcessing="true">
<match url="^(tag|category)/(.*)$" />
<action type="Rewrite" url="chineseurl.php" />
</rule>
<rule name="wordpress" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
保存即可生效,现在再点击中文标签试试?不会404了吧!
小结
此方法比较完美地解决了IIS7中文标签、分类目录显示404的问题,原理其实就是如果匹配到url中有category或tag的话转向到chineseurl.php处理。
其中chineseurl.php其实也就是很简单地修改了get头信息以来解决404的问题。虽然代码简单,但是实现地很完美,而且就算wordpress升级了也不会再次出现404问题了,有这个问题的网站还是推荐使用的
还是apache好,不用烦恼