我不确定这个标题是否有意义,但为了进一步解释,我有一个网站,每个请求都需要命中我的文件名为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;在其中,但我很想知道为什么这种情况正在发生。
答案 0 :(得分:1)
你的问题在这一行:
<add input="{URL}" pattern="Data/*" negate="true" />
因为您正在使用未转义的正斜杠/
,所以此字符串将与您的正则表达式匹配:
你的解决方案很简单,你只需要摆脱这种斜线。最终的正则表达式应为:Data//*