0

我正在将我的博客从 LAMP/PHP 迁移到 IIS。为了保留 URL,我使用了 URL 重写模块。在 192 页中,这适用于 191 页。基本上我需要用目录名称替换 URL 的“index.php”部分并附加一个“.html”后缀。

我的正则表达式模式:

^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 和无效的 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>
4

1 回答 1

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>
于 2013-09-26T13:48:38.380 回答