配置.htaccess RedirectMatch以与子域一起使用

时间:2013-05-28 21:08:37

标签: .htaccess redirect

我的.htaccess规则配置如下:

RedirectMatch permanent ^/$ http://www.foosite.com/content/

它被放入,以便任何进入我网站根目录的东西都会转到“content”文件夹。

今天我设置了一个名为“dev.foosite.com”的子域名,我打算用它来保存正常站点的精确副本,这样我就可以进行开发工作了。

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

我对这些规则的工作方式还不太了解,在尝试阅读文档后我感到愚蠢。

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

  1. 只要有人访问www.foosite.com,它就应该重定向到www.foosite.com/content /

  2. 只要有人去dev.foosite.com,就应该重定向到dev.foosite.com/content /

  3. ...谢谢

1 个答案:

答案 0 :(得分:1)

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

RedirectMatch permanent ^/$ /content/

(在开发网站www.foosite.com中将dev.foosite.com更改为.htaccess会产生相同的效果,但如果修改子域名或制作其他名称,则需要再次更改它网站的副本。上面描述的变化避免了这个问题。)

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

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

或类似的东西,假设a)您的网站上的网址曾经有一段时间不需要/content/,以及b)在旧网址约定和新网址之间存在一致的映射方式