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

时间:2015-04-17 22:20:27

标签: .htaccess mod-rewrite url-rewriting subdomain mod-proxy

对于移动子域名(m.domain)我只是尝试从公共主域图像文件夹(www.domain.com/images)中提取图像

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

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

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

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

1 个答案:

答案 0 :(得分:1)

当您代理请求时,服务器本身会执行外部请求并传递它接收的数据。如果客户端请求http://m.example.com/asdf,并且服务器将代理http://www.example.com/asdf,则服务器将向该URL发出代理请求,然后将http://m.example.com/asdf的数据返回给客户端。对于外部世界,http://m.example.com/asdfhttp://www.example.com/asdf上存在重复内容,并且请求两个网址的任何客户端都会将内容缓存两次。这不太理想。

使用您当前的方法,您可以进行隐式临时重定向。当客户端请求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]标记使用外部重定向。