htaccess将htm重定向到html(奇怪的行为)

时间:2017-04-13 12:20:58

标签: .htaccess redirect

我有两个不同提供商的主机帐户。

这两个网站在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。

重定向语法错了吗?如果是这样,那么为什么它只会影响一个托管服务提供商的域名。或者它是网站设置中其他地方的设置?

由于

1 个答案:

答案 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

有些人建议始终为重定向指定绝对目标网址以避免此类问题。 (就个人而言,我只会出于必要而这样做。)