我正在将我的博客从LAMP / PHP迁移到IIS。为了保留URL,我正在使用URL重写模块。在192页中,这适用于191.基本上我需要用目录名替换URL的“index.php”部分并附加“.html”后缀。
我的RegEx模式:
^myblog/index\.php/(.+)
我的重写网址:
myblog/contents/{R:1}.html
这在大多数情况下都适用,重写
http://www.MYSITE/myblog/index.php/2013/04/29/goto_slides
到
http://www.MYSITE/myblog/contents/2013/04/29/goto_slides.html
然而,在一种情况下它失败了:
http://www.MYSITE/myblog/index.php/2013/04/29/goto_notes_evolving_java
这将返回404,错误页面显示请求的URL为:
http://MYSITE:80/myblog/contents/2013/04/29/goto_notes_evolving_java
(请注意,未添加“.html”后缀;添加可查找页面。)
我可以看到工作的URL和不工作的URL之间的唯一区别是尾随“java”。
我该如何解决或解决这个问题?
web.config,每个请求:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="false" />
<rewrite>
<rules>
<clear />
<rule name="Rewrite blog URL from old PHP location" stopProcessing="true">
<match url="^myblog/index\.php/(.+)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="myblog/contents/{R:1}.html" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
答案 0 :(得分:1)
删除条件将解决您的问题 你的规则将成为:
<rule name="Rewrite blog URL from old PHP location" stopProcessing="true">
<match url="^myblog/index\.php/(.+)" />
<action type="Rewrite" url="myblog/contents/{R:1}.html" appendQueryString="true" />
</rule>