我正在尝试重写两个 URL。
/Inicio.aspx
到/Home
- 并
/Usuario/Solicitud.aspx
/Usuario/Solicitudes
使用IIS的模块重写。
我制定了规则:
并将代码放入 web.config 中
<rule name="Clean url" stopProcessing="true">
<match url="^Inicio$" />
<action type="Rewrite" url="/Home" />
</rule>
<rule name="Clean solicitud" stopProcessing="true">
<match url="^Usuario/Solicitud$" />
<action type="Rewrite" url="/Usuario/Solicitudes" />
</rule>
但它不起作用。
我甚至把这个放进去了Global.asax
:
public static void RegisterRoutes(RouteCollection routeCollection)
{
routeCollection.MapPageRoute("", "{Home}", "~/Inicio.aspx");
routeCollection.MapPageRoute("", "Usuario/{Solicitud}", "~/Usuario/Solicitud.aspx");
}
我好几天都在尝试解决这个问题。
答案1
我注意到当我像这样编写规则时导致错误 404.0 的原因:^Inicio.aspx 发送错误,但只是在这种情况下。以任何其他方式编写,应用程序都会运行,但不执行任何操作
404 表示它“正在工作”,但这/Home
不是有效的 URL 路径。(/Home
当您直接请求时,路由是否正常?我认为不是。)404 响应就是这样;HTTP 响应,它在这种情况下严格来说不是“错误”,正如您似乎暗示的那样。将正则表达式更改为^Inicio$
避免 404 响应,但就像您所说的那样,它“什么也不做” - 因为它永远不会匹配 - 它实际上什么也不做。
这又回到了我原来的评论...难道不应该反过来吗?例如链接到/Home
(“Clean url” URL)并从重写到/Home
(/Inicio.aspx
底层文件系统路径)?
在这种情况下,你的规则将变成如下形式:
<rule name="Clean url" stopProcessing="true">
<match url="^/Home$" />
<action type="Rewrite" url="/Inicio.aspx" />
</rule>