url重写如何工作?

cir*_*100 12 browser http url-rewriting httpwebrequest

Web服务器如何实现url重写机制并更改浏览器的地址栏?
我不是要求具体信息来配置apache,nginx,lighthttpd或其他!
我想知道当服务器想要重写url时向客户端发送什么样的信息?

M'v*_*'vy 29

有两种类型的行为.

一个是重写,另一个是重定向.

改写

服务器执行自身替换,使URL http://example.org/my/beatuful/page理解为http://example.org/index.php?page=my-beautiful-page

通过重写,客户端看不到任何内容,重定向仅在内部.浏览器中没有URL更改,只是服务器以不同方式理解它.

重定向

服务器检测到服务器不想要该地址.http://example.org/page1已移至http://example.org/page2,所以它告诉浏览器HTTP 3xx代码新页面是什么.然后客户端请求此页面.因此浏览器中的地址会发生变化!

处理

该过程保持不变,此图表对此进行了详细描述:

在此输入图像描述

备注每次重写/重定向都会触发对重写规则的新调用(例外情况IIRC)

RewriteCond %{REDIRECT_URL} !^$
RewriteRule .* - [L]
Run Code Online (Sandbox Code Playgroud)

可以用来阻止循环.(因为它已经发生过一次就没有重写).


小智 6

您是在谈论服务器端重写(例如 Apache mod-rewrite)吗?对于这些,地址栏通常不会改变(除非执行重定向)。或者你在谈论重定向?这些是通过让服务器响应 HTTP 代码(301、302 或 307)以及 HTTP 标头中的位置来完成的。