如何对URL进行URL重写以隐藏filename.aspx和querystring?

时间:2012-01-12 06:16:38

标签: asp.net iis-7 url-rewriting

https://mysite.com/Admin/Dashboard/DashboardReport.aspx - 这是我的实际网址,我想隐藏filename.aspx,如果有任何查询字符串值。如何?

我也尝试在IIS中重写URL中的FriendlyURL。 它没有生效。

请给我一个快速回复。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

网址重写有些含糊不清。你在改写用户看到的内容吗?或者服务器看到了什么?最好不要相信您无法更改URL显示给网站消费者的内容。

然而,诀窍是将它们发送到一个破碎的,不真实的URL ...然后为你重写URL,这样你就知道那个非真实的URL意味着什么。例如:

想象一下你有一个像这样的真实网址:

http://www.example.com/folder/subfolder/page.ext?param=value

但你想"重写" URL如下所示:

http://www.example.com/subfolder/value

如果它们位于page.ext...页面上,则无法更改其在网址栏中看到的内容。但是,您可以将它们重定向到假路径/subfolder/value,如下所示:

<rule name="subFolder Value Redirect">
  <conditions>
    <add input="{REQUEST_URI}" pattern="^/folder/([^/]+)/page\.ext\?param=([^&]+)$" />
  </conditions>
  <action type="Redirect" url="/{C:1}/{C:2}" />
</rule>

上面,我没有做一个&#34; url match&#34;因为我完全依赖条件。我唯一的条件是Request_URI看起来完全像我期望的那样。一些文件夹,一些子文件夹名称,page.ext和一个param = SomeValue的查询字符串。我使用()括号来动态捕获子文件夹名称和参数值。

注意:{C:0}表示&#34; 0th&#34;捕获条件组。捕获0是正则表达式^/folder/([^/]+)/page\.ext\?param=([^&]+)$的整个结果。 Capture 1是First Capture Group,即子文件夹名称。 Capture 2是第二个Capture Group,即param Value。

在正则表达式开头的

^意味着&#34;从头开始&#34;。有时你不想从一开始就开始,那就不会在那里。

正则表达式结束时的

$表示&#34;结束时#34;。有时候你不想在最后结束而且不会在那里。

角色类[^...]表示捕获任何不是...的角色。在这种情况下,捕获任何不是Slash的东西,或任何不是&符号的东西。

重复运算符[...]+加号符号表示至少捕获一次前面的规则,但最多可以捕获多次。

.是一个特殊字符,意思是&#34;任何&#34;。但我们的意思是在扩展名page.ext的点中。所以你像\.

一样逃避它

{REQUEST_URI}表示在域/端口之后将您的模式与整个URL进行比较。因此,在URL http://www.example.com:1234/subfolder...中,/子文件夹和所有以下内容都在{REQUEST_URI} EXCEPT 主题标签路由中。因此,如果你有一个Anchor或Angular UI Route,它们只停留在浏览器上,并且总是在任何重定向的末尾,但服务器永远不会看到它们,所以你不能解析主题标签。 / p>

action type="Redirect"仅表示此操作是将用户重定向到给定的网址。

url="/{C:1}/{C:2}"是相对于域的URL,因为它不是以协议开头的。这将重定向到/ subFolder / value,因为我们模式中的条件捕获1和条件捕获2捕获这两个值。

插入此规则后,用户将被重定向到破损的janked up URL,该URL看起来像一个State-Representative URL(RESTful)。的 Yaay !!

网址重写

重写适用于您(服务器),而不适用于客户。但是现在它们被重定向到一个漂亮的破损URL,你可以找到该URL的上下文,并通过为服务器重写它来告诉你的服务器它真正意味着什么。

<rule name="subFolder Value Rewrite">
  <conditions><add input="{REQUEST_URI}" pattern="^/([^/]+)/([a-zA-Z0-9]+)$" /></conditions>
  <action type="Rewrite" url="/folder/{C:1}/page.ext?param={C:2}" />
</rule>

这几乎与先前规则相反。这找到了一个模式,其中有一个路径&#34; subFolder&#34;名称,斜杠和由字母和数字组成的值。它再一次描述了Begginning ^和End $,因为我们不会期待意想不到的奇怪事情。因此,这将捕获如下的URL:

http://www.example.com/subFolder/1234abcDE

但不会抓住

http://www.example.com/lol/somethingelse/15?blah=kthx

然后,重写URL将计算回真实的实际URL,该URL映射到用于处理真正存在的文件的路径。并且,请记住,&#34;重写&#34;意味着它需要&#34;不正确&#34;用户看到的假值,并将其重写为丑陋的&#34;正确的&#34;服务器的值。不是相反。