如果 mod_proxy 不可用,在 htaccess 重写中不使用 P 标志有什么影响?

If mod_proxy is unavailable, what is the effect of not using the P flag in an htaccess rewrite?

对于移动子域 (m.domain) 我只是想从公共主域图像文件夹 (www.domain.com/images)

中提取图像

经过一些修改,我显然已经让 htaccess 重写代码成功运行,但我发现我无法在重写时使用 P 标志,而且我没有 mod_proxy由于共享托管而启用。

我的 m.domain.com htaccess 文件中的简单代码:

RewriteRule ^(images/.*) http://www.domain.com/ [L]

不使用 P 标志我没有得到什么好处?有什么区别?

当您代理请求时,服务器本身会执行外部请求并传递它接收到的数据。如果客户端请求 http://m.example.com/asdf,而服务器将代理到 http://www.example.com/asdf,服务器将向 url 发出代理请求,然后 return [=] 的数据10=] 给客户。对于外部世界,http://m.example.com/asdfhttp://www.example.com/asdf 上有重复的内容,任何同时请求 url 的客户端都会缓存两次。这并不理想。

使用您当前的方法,您可以进行隐式临时重定向。当客户端请求 http://m.example.com/asdf 时,服务器发回重定向响应,告诉客户端在 http://www.example.com/asdf 上重试。客户端再次尝试 url,并从服务器接收数据。对于外界来说很明显内容在一个地方,缓存数据时只会缓存http://www.example.com/asdf。如果你使重定向永久化,在某些情况下它会跳过重定向并直接请求http://www.example.com/asdf,减少你服务器的负载。

除非您有充分的理由代理请求(例如,因为包含数据的服务器仅在本地可用),否则您不应使用代理请求。如果 http://m.example.com/http://www.example.com 托管在同一台服务器上,并且您不关心托管重复内容,那么您应该使用内部重写。如果您担心重复的内容,可以使用外部重定向,使用 [R] 标志。