【问题标题】:How to do URL rewriting for the URL to hide filename.aspx and querystring?如何对 URL 进行 URL 重写以隐藏 filename.aspx 和 querystring?
【发布时间】:2012-01-12 06:16:37
【问题描述】:

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

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

请尽快回复我。

【问题讨论】:

  • 有很多关于如何重写或重定向 URL 的示例。但如果有人可能真的访问了硬路径,你需要两者都做。我在我的回答中解释。

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


【解决方案1】:

【讨论】:

  • 不错的文章但无法获取我的 URL mysite.com/Admin/Dashboard/DashboardReport.aspxmysite.com/Admin/Dashboard 的 Pattern 值
  • 您可以将 DashboardReport.aspx 重命名为 index.aspx,IIS 将使用您想要的 URL 运行它。我对下一部分不肯定,但您可以尝试将 web.config 放在子目录中并指定默认文档。 跨度>
  • 实际上,您可能想要使用可以为 Web 表单启用的 URL 路由。 msdn.microsoft.com/en-us/magazine/dd347546.aspx
  • 如果我访问 mysite.com/Admin/Dashboard/2.aspx,请确认我将重写哪些 URL 给用户...对不起,我是这个主题的新手
  • 我在 IIS 中添加了一个空白 URL 重写,如下所示 1. 模式为 /*.aspx 2. 使用 - 正则表达式 3. 操作类型为重写 4. 操作属性为 mysite.com/Admin 和我保存了这些设置并刷新了它...它显示了 404 file not found 错误..为什么:(
【解决方案2】:

URL 重写有点模棱两可。您是否正在重写用户看到的内容?或者服务器看到了什么?最好相信您无法更改 URL 向网站消费者显示的内容。

但是,诀窍是将它们发送到一个损坏的、非真实的 URL……然后为你重写 URL,这样你就知道那个非真实的 URL 意味着什么。例如:

假设你有一个像这样的真实 URL:

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

但您想“重写” URL 使其看起来像这样:

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

如果他们在页面 page.ext... 上,您无法更改他们在 URL 栏中看到的内容。但是,您可以将它们重定向到虚假路径 /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>

上面,我没有做“url 匹配”,因为我完全依赖于一个条件。我唯一的条件是 Request_URI 看起来完全符合我的预期。某个文件夹、某个子文件夹名称、page.ext 和一个 param=SomeValue 的查询字符串。我使用() 括号来动态捕获子文件夹名称和参数值。

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

^ 在正则表达式开头的意思是“从头开始”。有时你不想从头开始,那样就不会在那里。

$ 在正则表达式末尾的意思是“在末尾结束”。有时你不想在最后结束,那也不会有。

字符类[^...] 意味着捕获任何不是... 的字符。在这种情况下,捕获任何不是 Slash 或任何不是 & 符号的东西。

重复运算符[...]+Plus-Symbol 表示至少捕获前面的规则一次,但最多捕获多次。

. 是一个特殊字符,意思是“任何东西”。但我们的意思是扩展名page.ext 的点。所以你像\.一样逃避它

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

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

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

插入此规则后,用户将被重定向到看起来像状态代表 URL (RESTful) 的损坏的 janked URL。 耶!!

网址重写

重写是为您(服务器),而不是为客户。但是现在它们被重定向到一个漂亮的非常损坏的 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>

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

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

但不会抓到

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

然后,重写 URL 会返回一个真正的真实 URL,该 URL 映射到用于处理真实存在的文件的路径。而且,请记住,“重写”意味着它采用用户看到的“不正确”假值,并将其重写回服务器的丑陋“正确”值。反之亦然。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 2011-09-23
    • 2016-08-08
    • 2010-12-08
    • 1970-01-01
    • 2020-09-25
    • 2016-10-03
    • 2016-02-28
    • 2013-12-24
    相关资源
    最近更新 更多