0

我对 Url 重写和重定向的理解是(请指出我的错误假设)

  • 通过使用 url 的“重定向”选项 http://localhost/Search/VehicleDetails.aspx?id=2将其转换为 http://localhost/Search/2/VehicleDetails.aspx,当客户端浏览http://localhost/Search/VehicleDetails.aspx?id=2并且我们的重定向规则更改 http://localhost/Search/2/VehicleDetails.aspx为时,服务器尝试在文件夹中找到 VehicleDetails.aspx 页面/Search/2

  • 但是通过对url使用“重写”选项 http://localhost/Search/VehicleDetails.aspx?id=2将其转换为http://localhost/Search/2/VehicleDetails.aspx,当客户端浏览时http://localhost/Search/VehicleDetails.aspx?id=2,客户端浏览器显示http://localhost/Search/2/VehicleDetails.aspx,但在服务器内部请求是在Search目录的VehicleDetails.aspx页面中进行的,而不是在/Search/2目录的VehicleDetails.aspx中。 ..

我的问题是,我试图通过以下规则重写 url

<rewrite>
      <rules>
        <rule name="Search" stopProcessing="true">
          <match url="^.*(?:Search/VehicleDetails.aspx).*$" />
          <conditions>
            <add input="{QUERY_STRING}" pattern="id=(\d+)" />
          </conditions>
          <action type="Rewrite" url="/Search/{C:1}/VehicleDetails.aspx" redirectType="Permanent" appendQueryString="false" />
        </rule>
      </rules>
    </rewrite>

它重定向到/Search/2/VehicleDetails.aspx页面 HTTP 404.(The resource cannot be found.)。我希望客户端浏览器显示http://localhost/Search/2/VehicleDetails.aspx,但请求是在/Search/VehicleDetails.aspx..

还有我如何获取 id 的值(在本例中为 2)为 url 像

http://localhost/Search/2/VehicleDetails.aspx通过 Request.QueryString["id"]??

4

1 回答 1

3

您需要Append QueryString选中 IIS 中的复选框或手动添加此复选框,例如:-

<action type="Rewrite" url="/Search/{C:1}/VehicleDetails.aspx" 
redirectType="Permanent" appendQueryString="true" />

我注意到你有这个设置,False这就是 ID 没有被结转的原因,也可能是 404 的原因。

于 2013-06-26T08:49:11.227 回答