问题说明
WordPress建站推荐使用linux系统,但有的时候特殊情况必须要使用Windows服务器,将网站搭建到IIS上。在网站URL伪静态的时候如果出现中文,就会遇到提示404的情况,特别是标签和文章分类。下面给大家介绍一种处理的方式。
目前测试的Wordpress版本号:5.4
解决方案
1、在网站的目录下面新建一个“index2.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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?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文件,新增一条规则伪静态的重新规则,并将此规则放到其他的规则的顶部,代码如下:
1 2 3 4 |
<rule name="ChineseURL" stopProcessing="true"> <match url="archives/(tag|category)/(.*)" /> <action type="Rewrite" url="index2.php" /> </rule> |
具体的位置见下图
下面我把我完整的重写规则贴出来,大家可以参考或直接复制使用。
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 |
<rewrite> <rules> <rule name="ChineseURL" stopProcessing="true"> <match url="archives/(tag|category)/(.*)" /> <action type="Rewrite" url="index2.php" /> </rule> <rule name="Main Rule" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:0}" /> </rule> <rule name="WordPress: demo.wordpress.com" 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> |
3、注意事项:
如果 WordPress 不是装在根目录,则需要更改“<match url=”^(tag|category)/(.*)$” />”为“<match url=”^安装目录/(tag|category)/(.*)$” />”。
如果在固定链接设置里把默认的标签前缀和分类目录前缀(tag 和 category)改了,则更改这句里的对应内容即可。
以上方法只针对标签和分类里面的中文链接,如果您需要对网站的全部中文链接(比如文章、页面等)进行转化支持,那么可以不用添加最后一步的web.config规则,只需要直接编辑web.config,将上图里面的<action type=”Rewrite” url=”index.php” />改成<action type=”Rewrite” url=”index2.php” />即可。
由于此方法是新建index2.php文件,并配合伪静态规则实现,所以不受WordPress更新升级影响,推荐使用。
以上内容只是我个人在学习中的一点总结,如有不正之处还请谅解,谢谢!
发布者:柚子,转转请注明出处:https://ityouzi.com/archives/windows-iis-wordpress-rewrite-404.html