我已经编写了一个正则表达式列表,当前将未使用的页面重定向到适当使用的页面,例如,如果有人请求abc.aspx,它会将其重定向到IIS中的home.aspx,但是看到我无法解释所有页面,有没有办法捕获我可能错过的页面并将其映射到另一个页面?
答案1
使用 URL 重写模块 v2:
<rule name="CatchAll" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/catchall.aspx?page={REQUEST_URI}" />
</rule>
此规则将捕获对不存在的文件和目录的所有请求。通常,您会将其放在最后(最后左右)。
所有此类请求都将被重定向(当然是在内部)到/catchall.aspx
文件,请求的 URL 将包含在page
查询字符串参数中。例如,如果此页面 ( http://www.example.com/hello-kitten
) 将通过此类 catch-all 文件路由,则它将被重写为/catchall.aspx?page=/hello-kitten
。
{REQUEST_FILENAME}
:与请求匹配的文件或脚本的完整本地文件系统路径。例如:
- 网站根目录:
D:\websites\mysite.com\
- 请求的 URL:
http://mysite.com/help/delivery
{REQUEST_FILENAME}
=D:\websites\mysite.com\help\delievry
(即使这样的文件/文件夹不存在)——我相信您可以从上面的例子弄清楚它是如何构建的(如果涉及虚拟文件夹,那么它的工作方式会有所不同......但总体思路就在这里)。
如果将该规则的条件翻译成英文,则是:如果请求的资源不是文件也不是文件夹,则满足条件。
URL Rewrite 模块有IsFile
match 类型,但没有IsNotFile
。要“模拟” ,IsNotFile
需要IsFile
与 配合使用negate="true"
。 同理 也是如此IsDirectory
。
如果您通过 IIS 管理器访问 URL 重写模块,并单击此规则上的“编辑”,您将更容易理解它们到底起什么作用,而不是我的含糊其辞(IIS 管理器具有非常好的 GUI 来创建这些规则)。
答案2
哇,让我们为该配置提供更多背景信息!!
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="text/json" />
</staticContent>
<rewrite>
<rules>
<rule name="CatchAll" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>