Web applications 如何返回与服务器上的asp页面名称不同的经典asp页面

Web applications 如何返回与服务器上的asp页面名称不同的经典asp页面,web-applications,asp-classic,Web Applications,Asp Classic,是否可以向web客户端返回一个名为不同于从web服务器文件夹读取的原始经典asp页面的页面 我想实现一个真实的例子:假设我有一个名为 calendar.asp 如果今天(2010年1月6日)调用此页面,则返回到客户端网站的页面应为: calendar-of-january-6-2010.asp calendar-of-january-7-2010.asp 如果明天调用同一页面,则返回到客户端网站的页面应为: calendar-of-january-6-2010.asp calendar-

是否可以向web客户端返回一个名为不同于从web服务器文件夹读取的原始经典asp页面的页面

我想实现一个真实的例子:假设我有一个名为

calendar.asp
如果今天(2010年1月6日)调用此页面,则返回到客户端网站的页面应为:

calendar-of-january-6-2010.asp
calendar-of-january-7-2010.asp
如果明天调用同一页面,则返回到客户端网站的页面应为:

calendar-of-january-6-2010.asp
calendar-of-january-7-2010.asp
你明白了。根据某些内部逻辑,将特定的命名为classic asp页面返回给web客户端

感谢您提供的任何意见

更新:上述示例中的特定日期文件实际上不存在(或者我可以使用重定向)。 我希望找到类似于我用来返回csv文件的东西:

Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition", "attachment; filename=export.csv"

当然不一样,因为这会让客户端浏览器提示保存/打开框。类似的东西。

好的,看到你的编辑想链接到每日日历

你可以这样想:

  • 构建页面,使链接指向友好的URL-/calendars/jan-01-2010.asp、/calendars/jan-02-2010.asp等等
  • 将IIS配置为对/calendars/-使用自定义404错误,以便每当客户端请求此处不存在的页面时,您的服务器将运行calendar.asp(而不是仅发送回“404未找到页面”)
  • 就这样。您的客户端将永远不会看到URL“calendar.asp”,因为他们从未请求过它。他们所做的只是跟随你给他们的友好链接。是您的服务器在做聪明的事情(捕捉“无效”请求,并假装在该URL上有一个有效页面)

  • StackOverflow的工作原理是这样的-它使用ASP.NET MVC和ASP.NET路由引擎截取那些友好的问题URL,在数据库中查找它们,并返回生成的页面,这样对用户(和搜索引擎)来说,就好像有数千个友好的命名页面,当一切都发生在幕后时。

    您可以编写一个自定义ISAPI过滤器(C++),以控制哪个物理文件映射到URL。要安装此筛选器,您需要对IIS框具有管理员访问权限,如果您确实希望自定义URL具有.asp扩展名,则您的筛选器需要容纳此扩展名(因为ISAPI筛选器主要是根据IIS的扩展名选择的)。检查和MSDN链接。 包含更多指针(它将.chm重新映射到.asp文件,易于操作)

  • 您可以从calendar.asp重定向到新页面。当用户请求此新页面时,请使用URL重写在内部重写回calendar.asp

  • 不太好-在第一次请求calendar.asp时生成实际页面(带有日期的页面)(不要忘记在24小时内删除它)并重定向到此页面


  • 这些页面是否确实存在,或者它们是“虚拟”页面?如果我没有记错,您需要在global.asa中捕获请求并重写路径。您还需要做一些事情,让asp处理无效路径(不要让IIS说找不到文件)。此外,我认为最好说由具有不同名称的asp脚本处理“虚拟”页面,而不是返回具有不同名称的页面,因为浏览器在请求时已经知道该名称。否则需要重定向。IIS的版本?ASP正在发送什么类型的内容?你能提供一些你为什么要这样做的信息吗?@AnthonyWJones:我有一个日历,上面有很多事件(当然是从数据库中读取的)。每个事件旁边都有一个名为“显示当天所有事件”的链接。对于搜索引擎来说,能够返回包含名称的页面(不需要在web服务器上进行物理创建)比仅使用日期作为参数的f.i.要好得多。无论如何,如果你看看stackoverflow.com的页面,它们也是根据你点击的问题命名的。我只是想知道经典asp是否也能做到这一点。我知道我可以编写ISAPI过滤器(但我以前没有这样做过)。问题是,是否有某种方法(通过以某种方式修改标题)可以使用经典asp实现这一点。据我所知,这是在asp中实现这一点的唯一方法,因为标准asp.dll只是基于URL查找文件,并报告无效的页面请求,而不涉及全局.asa。@tijmenvdk,我认为IIS可以配置为发送asp所有请求,即使是坏的请求。该过程类似于向其发送新的扩展。但我已经多年没有为CMS这样做了,但即使是,返回给客户的名称也不是日期为的名称,不是吗?@edelcom:没有任何名称返回给客户。客户机指定所需的资源,服务器发送资源,因为客户机已经知道它,所以它认为不需要为它提供名称。让服务器更改所请求项目名称的唯一方法是使用Response.Redirect,它实际上是告诉客户端“请改为请求此资源”。你这样做的目的和对搜索引擎友好似乎是相互冲突的。Thx Dylan,这对我帮助很大。我从来没有意识到一个名字没有返回给客户。今天学到了一些东西,是的@Dylan Beattie:我试图实现这一点,但仍有一件事我不明白:如果我将IIS配置为返回一个名为calendars.asp的页面(从/calendars/jan-01-2010.asp重新路由),用户在浏览器中看到的页面名称是calendars.asp,而不是/calendars/jan-01.2010.asp(或者我将IIS配置错了)。因此,顶部的名称与您单击的链接的名称相同,因此尽管它已被重新路由,但实际返回的页面仍然是单击的链接的名称,而不是提供动态内容的页面。我在这里很困惑…@Edelcom-听起来你配置IIS错了。你需要去埃罗