【问题标题】:htaccess redirect htm to html (strange behaviour)htaccess 将 htm 重定向到 html(奇怪的行为)
【发布时间】:2023-03-29 13:50:01
【问题描述】:

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

两个站点在 htaccess 中都有以下内容。

RedirectMatch 301 ^(.*).htm $1.html

在一个站点(VPS)上它按预期工作并且

//www.example.com/page.htm

正确转发到

//www.example.com/page.html

但在其他托管服务提供商(共享托管。不同的提供商)上,它会从 url 中删除 www,因此转到:-

//example.com/page.html

如果发生 htm-to-html 重定向,它只会删除 www。因此,并非所有页面都删除了 www,因此也不是从所有 url 中删除 www 的全局设置。

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

谢谢

【问题讨论】:

    标签: .htaccess redirect


    【解决方案1】:
    RedirectMatch 301 ^(.*).htm $1.html
    

    如果您没有在目标 URL 中明确包含主机名(即指定一个 absolute URL),则 Apache 从当前服务器获取此信息。默认情况下,这将是请求中使用的主机名(www、非 www 或其他)。但是,如果设置了指令UseCanonicalName On,则将使用ServerName 指令定义的主机名。这就是我猜正在发生的事情。

    不幸的是,在 共享 服务器上,您将无法更改此行为。 UseCanonicalName 指令只能在服务器配置中设置,.htaccess 不能。

    我认为唯一的解决方案是明确并在上述指令中指定规范的主机名:

    RedirectMatch 301 ^/(.+)\.htm$ http://www.example.com/$1.html
    

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

    【讨论】:

    • 谢谢。由 ServerName 指令引起是有道理的。我将使用绝对目标 url :)
    • 不客气。如果这回答了您的问题,那么请将其标记为已接受(左侧的复选标记)以将其从未回答的问题队列中删除(这也为您提供了一些代表)。一旦你有 15 个以上的代表,那么你也可以对你认为有用的答案进行投票。谢谢,非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多