【问题标题】:IIS web.config url rewritingIIS web.config url 重写
【发布时间】:2020-05-12 16:08:50
【问题描述】:

我在 web.config 中使用以下规则:

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
  <system.webServer>
   <rewrite>
    <rules>
     <rule name="rewrite">
      <match url="([0-9]+)/([0-9]+)" />
      <action type="Rewrite" url="index.php?year={R:1}&amp;item={R:2}" />
     </rule>
    </rules>
   </rewrite>
 </system.webServer>
</configuration>

它有效。

但如果用户在第二个查询(item)中写了一个或多个字母,我需要显示 404 错误,例如1b,或1bla等。

它应该只允许一个(正)数字,并且可能是一个查询,如 ?utm_source=anothersite?ref=anothersite 等。

换句话说,url应该是:

www.mysite.com/{year}/{item}

其中 {year} 和 {item} 都是强制性的,只能是数字,不允许其他元素(例如:www.mysite.com/{year}/{item}/{somethingelse}),除了 ?key=value

如何更改 match url 值以达到该结果?

谢谢。

【问题讨论】:

  • "但是如果用户在第二个查询(项目)中写入一个或多个字母,例如 1b 或 1bla 等,我需要显示 404 错误。您的 Web 应用程序接收到错误的输入,因此它应该重定向到 404 页面。这与 IIS 或重写规则无关。
  • @Lex Li - 在我的服务器上,如果用户写入,例如 www.mysite.com/1a/1,那么他会收到 404 错误,但如果他写入,例如 www.mysite。 com/1/1a 然后该 url 被接受 - 它不应该。这就是我需要的。

标签: iis url-rewriting web-config


【解决方案1】:

请在您的模式末尾添加一个“$”。

<match url="([0-9]+)/([0-9]+)$" />

这是我的测试结果:

【讨论】:

  • 对我来说效果很好。您可以查看我上面的答案。请告诉我你的错误信息。
  • 在我的网站上使用 ,我收到 404 错误(自定义页面)。相信我。 “$”的含义/目的是什么?
  • "$" 表示匹配输入字符串的结束位置。如果不加“$”,那么“1/1a”也可以匹配成功。关于404错误,请贴出您的详细错误信息。
  • 问题已解决。这是由于两个 web.config 文件之间的冲突(一个在根目录中,另一个在我网站的子文件夹中)。感谢您的回答:它帮助了我。
猜你喜欢
  • 2017-08-23
  • 2011-05-23
  • 2016-11-03
  • 2013-04-23
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多