.htaccess htaccess将htm重定向到html(奇怪的行为)
我有两个不同的供应商托管帐户 这两个站点在htaccess中都有以下内容.htaccess htaccess将htm重定向到html(奇怪的行为),.htaccess,redirect,.htaccess,Redirect,我有两个不同的供应商托管帐户 这两个站点在htaccess中都有以下内容 RedirectMatch 301 ^(.*).htm $1.html 在一个站点(VPS)上,它按预期工作,并且 //www.example.com/page.htm 已正确转发到 //www.example.com/page.html 但在另一个托管提供商(shared hosting.Different provider)上,它从url中删除了www,因此转到:- //example.com/page.html
RedirectMatch 301 ^(.*).htm $1.html
在一个站点(VPS)上,它按预期工作,并且
//www.example.com/page.htm
已正确转发到
//www.example.com/page.html
但在另一个托管提供商(shared hosting.Different provider)上,它从url中删除了www,因此转到:-
//example.com/page.html
它仅在htm到html重定向发生时剥离www。所以并不是所有的页面都删除了www,所以也不是从所有URL中删除www的全局设置
这是错误的重定向语法吗?如果是这样,为什么它只影响一个托管提供商上的域。或者是网站设置中的其他设置
谢谢
如果在目标URL中没有明确包含主机名(即指定一个绝对URL),则Apache会从当前服务器获取此信息。默认情况下,这将是请求中使用的主机名(www、非www或其他)。但是,如果设置了指令usecononicalname On
,则将使用指令ServerName
定义的主机名。我猜这就是正在发生的事情
不幸的是,在共享服务器上,您无法更改此行为。只能在服务器配置中设置useCononicalName
指令,而不能在.htaccess
中设置
我认为唯一的解决方案是显式的,并在上述指令中指定规范主机名:
RedirectMatch 301 ^/(.+)\.htm$ http://www.example.com/$1.html
有些人建议始终为重定向指定一个绝对目标URL,以避免此类问题。(就我个人而言,我只是出于必要才这样做。)谢谢。由ServerName指令引起的错误是有道理的。我将使用绝对目标url:)不客气。如果这回答了您的问题,请将其标记为已接受(左侧的复选标记)以将其从未回答的问题队列中删除(这也会给您一些代表)。一旦你有15个以上的代表,你也可以投票给你觉得有用的答案。谢谢,非常感谢:)
RedirectMatch 301 ^/(.+)\.htm$ http://www.example.com/$1.html