最近在折腾Windows VPS,并且使用IIS 7搭建了网站。使用Wordpress一般都会启用伪静态,wordpress自带IIS的伪静态规则,但是被我发现了一个很严重的问题,那就是URL Rewrite不支持中文,这样中午的标签和中文的分类目录(没指定别名)点击后就会404了。
在网络上搜索了一阵后终于找到了一个比较完美的方案,因为传播比较广,已经找不到原作者了,但还是向原作者表示感谢。
1.创建chineseurl.php文件
首先我们要在Wordpress安装目录下创建chineseurl.php文件,为下一步做准备。
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?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">上插入专门的中文重写规则即可:
1 2 3 4 |
<rule name="ChineseURL" stopProcessing="true"> <match url="^(tag|category)/(.*)$" /> <action type="Rewrite" url="chineseurl.php" /> </rule> |
插入完成后应该是像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?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好,不用烦恼