使用三个段时重写 URL 不起作用

Posted

技术标签:

【中文标题】使用三个段时重写 URL 不起作用【英文标题】:Rewriting URL not working when using three segments 【发布时间】:2022-01-14 17:32:00 【问题描述】:

此代码完美地用于 url 重写 URL 的 2 段。

例如

/nottinghamshire/newark

但是,如果我将 string t = Request.QueryString["t"].Replace("-", " ").ToLower().Replace(".aspx", "") 添加到组合中,则意味着

/nottinghamshire/newark/plumbers

它失败了,404 就像这样:

这行得通吗?

?r=nottinghamshire&c=newark&t=plumbers

这是我的代码

网络配置:

  <rule name="rewritereview">
    <match url="^([^/]+)/([^/]+)?$" />
    <conditions>
      <add input="REQUEST_FILENAME" matchType="IsFile" negate="true" />
      <add input="REQUEST_URI" pattern="\.js|\.css|\.img|\.scimg" negate="true" />
    </conditions>
    <action type="Rewrite" url="/city.aspx?r=R:1&amp;c=R:2&amp;t=R:3" appendQueryString="false" />
  </rule>

city.aspx.cs 上的代码

string r = Request.QueryString["r"].Replace("-", " ").ToLower();
string c = Request.QueryString["c"].Replace("-", " ").ToLower().Replace(".aspx","");
string t = Request.QueryString["t"].Replace("-", " ").ToLower().Replace(".aspx", "");

if (r != null && c != null && t != null)

  // populate page

else // 404?



我做错了什么?

【问题讨论】:

当您尝试“?r=nottinghamshire&c=newark&t=plumbers”时,您会得到 r、c 和 t 的值 @MRxParkour,我得到的正是我所要求的 - 诺丁汉、纽瓦克、管道工作为值,这就是为什么我猜测它与网络配置相关 【参考方案1】:

尝试更新匹配网址。添加一个额外的“/([^/]+)”

<match url="^([^/]+)/([^/]+)/([^/]+)?$" />

【讨论】:

您,先生,是个传奇。我怎么错过了? 嗯,正则表达式确实很混乱,imo。供将来参考,regex101.com 非常适合调试这类东西

以上是关于使用三个段时重写 URL 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess:使用参数重写 url 不起作用

URL 重写在 IIS 7 上不起作用

Azure 网站 - 使用 web.config 重写 URL 不起作用

URL 重写在 Nginx 中不起作用

从 Apache 2,2 迁移到 Apache 2.4 后,URL 重写不起作用

用 .htaccess 重写不起作用