Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess htaccess将htm重定向到html(奇怪的行为)_.htaccess_Redirect - Fatal编程技术网

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

.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

我有两个不同的供应商托管帐户

这两个站点在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
它仅在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