URL重写不使用特定后缀

时间:2013-09-21 20:49:02

标签: iis iis-7 url-rewriting

我正在将我的博客从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>

1 个答案:

答案 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>