IIS - URL当网址包含“数据”字样时,网址重写无法正常工作在其中

时间:2017-08-09 16:37:02

标签: php .htaccess iis url-rewriting web-config

我不确定这个标题是否有意义,但为了进一步解释,我有一个网站,每个请求都需要命中我的文件名为controller.php。

我已经工作了一段时间,今天包含pdf文件的新目录已添加到网站。目前,该目录中有两个可通过超链接访问的文件。

我访问的两条相对路径是:http://q360help.joehelp.com/Docs/Document_Grid_Filters.pdf
正确地重定向到:
http://q360help.joehelp.com/controller.php?Docs/Document_Grid_Filters.pdf



http://q360help.joehelp.com/Docs/SERVERDATA.pdf
这是假设但目前没有重定向到:
http://q360help.joehelp.com/controller.php?Docs/SERVERDATA.pdf

相反,我在尝试访问没有通过控制器的任何内容时会遇到404错误。当我手动将controller.php添加到URL时,文件加载正常。我只是好奇它为什么没有正确重定向。每个其他目录中的每个其他pdf文件都可以正常工作。

这是我的web.config文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <httpRedirect enabled="false" destination="" />
            <rewrite>
                <rules>
                    <rule name="controller redirect" enabled="true" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^(http://)?(www.)?joehelp.com" negate="true" />
                    <add input="{HTTP_HOST}" matchType="Pattern" pattern="^(http://)?(www.)?q360help.joehelp.com$" ignoreCase="true" negate="false" />
                    <add input="{URL}" pattern="Data/*" negate="true" />
                    <add input="{URL}" pattern="Skins/*" negate="true" />
                    <add input="{URL}" pattern="Resources/*" negate="true" />
                    <add input="{PATH_INFO}" pattern="^/controller.php*$" negate="true" />
                </conditions>
                <action type="Redirect" url="/controller.php?{R:0}" />
            </rule>
        </rules>
    </rewrite>
    <httpErrors errorMode="Detailed" />
</system.webServer>

编辑:经过进一步测试,似乎有“数据”字样。 URL中的任何位置都会导致此错误。这是件事吗?我从来没有听说过这样的事情,并且通过IIS中的GUI使用URL重定向模式测试器表明URL 应该重定向。

此时我的解决方法是更改​​文件名,使其没有数据&#39;在其中,但我很想知道为什么这种情况正在发生。

1 个答案:

答案 0 :(得分:1)

你的问题在这一行:

<add input="{URL}" pattern="Data/*" negate="true" />

因为您正在使用未转义的正斜杠/,所以此字符串将与您的正则表达式匹配:

  • /数据/东西
  • /Docs/SERVERDATA.pdf
  • /数据
  • / Datasadasdas

你的解决方案很简单,你只需要摆脱这种斜线。最终的正则表达式应为:Data//*