配置.htaccess RedirectMatch以更好地处理子域

配置.htaccess RedirectMatch以更好地处理子域,.htaccess,redirect,.htaccess,Redirect,我在.htaccess中有一个如下配置的规则: RedirectMatch permanent ^/$ http://www.foosite.com/content/ 它被放进去了,所以任何指向我的网站根目录的东西都会转到“内容”文件夹 今天我建立了一个名为“dev.foosite.com”的子域,我计划用它来保存普通站点的精确副本,这样我就可以进行开发工作 问题是,当我浏览dev.foosite.com时,它被重定向到www.foosite.com/content/ 我只是对这些规则的工作原

我在.htaccess中有一个如下配置的规则:

RedirectMatch permanent ^/$ http://www.foosite.com/content/
它被放进去了,所以任何指向我的网站根目录的东西都会转到“内容”文件夹

今天我建立了一个名为“dev.foosite.com”的子域,我计划用它来保存普通站点的精确副本,这样我就可以进行开发工作

问题是,当我浏览dev.foosite.com时,它被重定向到www.foosite.com/content/

我只是对这些规则的工作原理知之甚少,在尝试阅读文档之后,我觉得自己更傻了

如何为以下内容设置.htaccess:

  • 任何时候有人访问www.foosite.com,都应该重定向到www.foosite.com/content/

  • 任何时候有人访问dev.foosite.com,它都应该重定向到dev.foosite.com/content/


  • 谢谢…

    您已经设置了
    RedirectMatch
    指令,以便它生成指向绝对URL的重定向,而您真正需要的是一个相对URL——也就是说,重定向不应该替换URL的原始主机名,这样无论在哪个站点上调用它,它都可以工作。为此,请将重定向匹配行(最好在两个站点上,但至少在dev子域上)更改为:

    (在dev站点的
    .htaccess
    中将
    www.foosite.com
    更改为
    dev.foosite.com
    将具有相同的效果,但如果您修改子域名或制作站点的另一个副本,则需要再次更改。上述更改可避免出现这种情况。)

    如果您感兴趣,还有一个关于可能的增强的注意事项:您的指令目前会丢弃任何路径信息,因此如果有人转到例如
    http://[www | dev].foosite.com/old/path/to/page.html
    ,她将被重定向到
    ../content/
    ,而不是
    ../page.html
    ;为了保存路径信息,假设需要这样做,您可以:

    RedirectMatch permanent ^/(.*)$ /content/$1
    

    或者类似的,假设a)曾经有一段时间你的站点上的URL不需要
    /content/
    ,b)有一种一致的方式在旧的URL约定和新的URL约定之间映射。

    先生,你太棒了。非常感谢你在这方面帮助我。在我的例子中,生产站点和开发站点都在同一个域中,dev.foosite.com域只是一个子域。因此,您的第一个示例^/$/content/就是所需的全部内容。非常感谢。总是乐于助人。
    RedirectMatch permanent ^/(.*)$ /content/$1