【问题标题】:Redirect to a new URL without browser issuing a second request?在浏览器不发出第二个请求的情况下重定向到新 URL?
【发布时间】:2011-05-25 18:33:07
【问题描述】:

有没有办法让网络服务器发出重定向,而不需要浏览器发出第二个请求?

例如,浏览器请求http://www.mysite.com/lion,但服务器希望浏览器将位置更改为http://www.mysite.com/jungle。我知道如何完成此操作的唯一方法是让服务器使用jungle URL 发送3xx 状态代码,然后浏览器发出一个新请求来检索它。

服务器是否可以发送页面jungle 以响应lion 请求,并告诉浏览器“将您的URL 设置为http://www.mysite.com/jungle”?

【问题讨论】:

    标签: http redirect webserver http-status-code-302 http-redirect


    【解决方案1】:

    是的,它被称为 URL 重写。 Apache 和 IIS 都有允许这样做的模块。

    对于 Apache,在 .htaccess 文件或虚拟主机中的 httpd.conf 中:

    RewriteEngine On
    RewriteRule lion jungle [L]
    

    当狮子被请求时,丛林的内容将被发送,没有重定向。

    【讨论】:

    • 但是会导致浏览器改变其地址栏中的URL吗?
    • 没有。仅当浏览器请求不同的 URI 时,URL 才会更改,这不会发生。您不能既重定向也不重定向。如果您希望更改 URL(即您希望客户端,无论是浏览器还是搜索爬虫,都知道 URI 在另一个位置),您应该发送重定向标头和适当的状态代码,这是正确的做法。请记住,当您进行重定向时,您只是在浏览器发出第二次请求之前发送标头,它速度很快且不会浪费带宽。
    【解决方案2】:

    在 ASP.NET 中,您可以使用 Server.Transfer()。这会导致为当前请求返回不同的页面。

    请注意,浏览器不知道正在发生这种情况。即使您会看到来自http://www.mysite.com/jungle 的内容,它仍会在地址栏中显示http://www.mysite.com/lion

    如果您想通知浏览器正在加载不同的页面,那么就我而言,您需要重定向。

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 1970-01-01
      • 2015-12-03
      • 2011-10-27
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      相关资源
      最近更新 更多