使用 ASP.NET 查询字符串重写 URL

per*_*456 1 c# asp.net .htaccess mod-rewrite url-rewriting

我想在 ASP.NET 中用查询字符串重写 URL。URL 如下所示:

http://localhost:51392/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew==
Run Code Online (Sandbox Code Playgroud)

我想将 url 改写成这样:

http://localhost:51392/Details/zdpMPZVXkDtjw92Crx7eew==
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法重写 url(类似这样):

 <urlMappings>
      <add url="~/Shop"   mappedUrl="~/shop.aspx"/>
</urlMappings>
Run Code Online (Sandbox Code Playgroud)

但我不太确定如何使用查询字符串正确映射 URL?可用于实现此目的的最简单或其他方法是什么?

谢谢!

PS 伙计们,这就是我尝试访问重写 URL 的方式:

<a href='<%# "/productdetails.aspx?id=" + RL_DAL.RijndaelHelper.AES.Encrypt(Eval("ProductID").ToString(),"key_to_enrypt")  %>'><%# Eval("ProductName") %>
Run Code Online (Sandbox Code Playgroud)

Nik*_*nte 6

在 IIS 平台上托管的 asp.net -

  1. URL Rewrite模块安装到 IIS 中
  2. 将此添加到system.webServer站点的 web.config ( ) 部分

    <rewrite>
        <rules>
            <rule name="rewrite" stopProcessing="true">
              <match url="productdetails.aspx" />
              <conditions>
                <add input="{QUERY_STRING}" pattern="id=([a-zA-Z0-9=]+)" />
              </conditions>
              <action type="Rewrite" url="/Details/{C:1}" appendQueryString="false" />
            </rule>
        </rules>
    </rewrite>
    
    Run Code Online (Sandbox Code Playgroud)

然后每个请求都/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew==将被重写http://localhost:51392/Details/zdpMPZVXkDtjw92Crx7eew==. 但是重写并不意味着它会在用户的浏览器中改变,只是服务器上的目的地。

但是,如果要重定向它,请将规则更改为:

<rule name="redirect" stopProcessing="true">
  <match url="productdetails.aspx" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="id=([a-zA-Z0-9=]+)" />
  </conditions>
  <action type="Redirect" url="/Details/{C:1}" redirectType="Permanent" appendQueryString="false" />
</rule>
Run Code Online (Sandbox Code Playgroud)

这将执行永久 301 重定向,PermanentTemporary对操作类型进行临时 307 重定向更改。

有关两者之间差异的更多信息,请参阅重定向与重写


使用我给出的重定向规则:

用户输入/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew==他们被重定向到的/Details/zdpMPZVXkDtjw92Crx7eew==URL 必须能够处理请求。此场景通常用于将站点移动到新平台/URL 结构时。

做相反的事情,在用户输入/Details/zdpMPZVXkDtjw92Crx7eew==和站点处理使用请求的/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew==情况下:

<rule name="rewrite">
    <match url="Details/([a-zA-Z0-9=]+)" />
    <action type="Rewrite" url="/productdetails.aspx?id={R:1}" />
</rule>
Run Code Online (Sandbox Code Playgroud)

GitHub 上的示例