.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>