.htaccess 301单页redirect

网站重新devise后,我有几个页面需要redirect。 一切都停留在同一个领域,只是一些事情已经重新组织和/或重新命名。 他们的forms是:

/contact.php

就是现在:

/contact-us.php

使用.htaccess文件,我添加了这一行,这是我最推荐的行:

RedirectMatch 301 /contact.php /contact-us.php 

这大体上是好的 – 它做的工作 – 问题是,它也redirect:

  • /team1/contact.php
  • /non-existant-folder/contact.php

有没有一种方法来指定我只想redirect在根的contact.php?

RedirectMatch使用与URLpath匹配的正则expression式。 而你的正则expression式/contact.php只是意味着任何包含/contact.php URLpath,而不是任何完全是/contact.php URLpath 。 所以使用string( ^$)的开始和结束的锚点:

 RedirectMatch 301 ^/contact\.php$ /contact-us.php 

这应该做到这一点

 RedirectPermanent /contact.php /contact-us.php 
 redirect 301 /contact.php /contact-us.php 

使用redirectmatch规则没有意义,然后必须编写链接以使它们完全匹配。 如果你不包括你不必排除! 只需使用不匹配的redirect,然后正常使用链接

你也可以使用RewriteRule,如果你想模板匹配和redirect的url的能力。

如果您更喜欢使用最简单的解决scheme来解决问题,则RedirectMatch的替代scheme是更基本的Redirect指令。

它不使用模式匹配,所以更明确,更容易让别人理解。

 <IfModule mod_alias.c> #Repoint old contact page to new contact page: Redirect 301 /contact.php http://example.com/contact-us.php </IfModule> 

查询string应该被结转,因为文档说:

超出匹配的URLpath的其他path信息将被追加到目标URL。

它会将您的商店页面redirect到您的联系页面

  <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / Redirect 301 http://www.youtdomain.com/store http://www.youtdomain.com/contact </IfModule>