我有两个不同提供商的主机帐户。
这两个网站在htaccess中都有以下内容。
RedirectMatch 301 ^(.*).htm $1.html
在一个网站(VPS)上,它按预期工作,
//www.example.com/page.htm
正确转发到
//www.example.com/page.html
但是在其他托管服务提供商(共享托管。不同提供商)上,它会从网址中删除www,所以请转到: -
//example.com/page.html
如果发生htm-to-html重定向,它只剥离www。因此,并非所有已删除www的网页都不是全局设置,而是从所有网址中删除www。
重定向语法错了吗?如果是这样,那么为什么它只会影响一个托管服务提供商的域名。或者它是网站设置中其他地方的设置?
由于
答案 0 :(得分:0)
RedirectMatch 301 ^(.*).htm $1.html
如果未在目标URL中明确包含主机名(即指定绝对 URL),则Apache会从当前服务器获取此信息。默认情况下,这将是请求中使用的主机名(www,非www或其他)。但是,如果设置了指令UseCanonicalName On
,则将使用由ServerName
指令定义的主机名。这就是我猜的情况。
不幸的是,在共享服务器上,您无法更改此行为。 UseCanonicalName
指令只能在服务器配置中设置,而不能在.htaccess
。
我认为唯一的解决方案是明确并在上述指令中指定规范主机名:
RedirectMatch 301 ^/(.+)\.htm$ http://www.example.com/$1.html
有些人建议始终为重定向指定绝对目标网址以避免此类问题。 (就个人而言,我只会出于必要而这样做。)