【问题标题】:IIS 7 rewrite rule - rewrite same page, one or multiple query string parametersIIS 7 重写规则 - 重写同一页面,一个或多个查询字符串参数
【发布时间】:2015-09-17 03:19:57
【问题描述】:

我有以下重写规则设置

<rule name="Department Rewrite" stopProcessing="true">
  <match url="^products/([^$]+)" />
  <action type="Rewrite" url="products?durl={R:1}" />
</rule>
<rule name="Product Rewrite" stopProcessing="true">
  <match url="^products/([^$]+)/([^$]+)" />
  <action type="Rewrite" url="products?durl={R:1}&amp;purl={R:2}" />
</rule>

部门重写按预期工作,现在我正在尝试配置产品重写工作。

使用 URL products/department

  • Request.QueryString["durl"] 输出部门

使用 URL products/department/product

  • Request.QueryString["durl"] 输出部门/产品
  • Request.QueryString["purl"] 为 NULL

如何让 Product Rewrite 按预期工作?

更新

还研究了如果 URL 重写包含 action/edit,如何忽略它们。例如

products/department/action/edit
products/department/product/action/edit

假设我需要应用一些条件语句但不确定如何编写它们。

【问题讨论】:

    标签: asp.net url-rewriting webforms


    【解决方案1】:

    [^$] 想做什么? 在部门重写中,第一组说“匹配除 $ 之外的任何内容”,这是 url 的其余部分,因此应用了该规则,并且全部在 durl 中。

    试试这些,它们的意思是“匹配除斜线之外的任何内容”。如果你知道那是完整的 url(它仍然可以有查询字符串参数),我也喜欢用 $ 来结束它。这将使产品跳过部门规则。

    在部门规则中:

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

    在产品规则中:

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

    我喜欢两组相同的一致性,但您可以让第二组取任何东西,以获得更简单的规则:

    <match url="^products/([^/]+)/(.+)" />
    

    一个建议:把更具体的规则放在第一位,所以如果你只发送一个级别(部门),它肯定不会匹配产品规则。现在的情况,部门抓住了产品规则。如果将它们颠倒过来,即使不更新规则,它也可能会起作用。

    【讨论】:

    • 您的建议起到了作用。如果 URL 包含“/action/edit”,我有什么想法可以否定吗?
    • 您要避免的整个网址是什么?
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多