58

重新设计网站后,我有几个页面需要重定向。一切都在同一个域中,只有一些东西被重组和/或重命名。它们的形式为:

/contact.php

就是现在:

/联系我们.php

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

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

这很好 - 它完成了工作 - 问题是,它还重定向:

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

有没有办法指定我只想重定向根目录中的contact.php?

4

6 回答 6

88

RedirectMatch使用与 URL 路径匹配的正则表达式。而且您的正则表达式/contact.php仅表示包含/contact.php但不只是任何确切的 URL 路径的任何 URL 路径/contact.php。因此,使用锚点作为字符串的开头和结尾 (^$):

RedirectMatch 301 ^/contact\.php$ /contact-us.php
于 2009-09-14T11:54:18.403 回答
22

这应该这样做

RedirectPermanent /contact.php /contact-us.php 
于 2009-09-14T11:51:14.590 回答
9
redirect 301 /contact.php /contact-us.php

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

于 2013-06-19T15:48:20.640 回答
0

如果您想要模板匹配和重定向 url 的能力,您也可以使用RewriteRule 。

于 2009-09-14T11:51:16.013 回答
0

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

它不使用模式匹配,因此更明确,更易于其他人理解。

IE

<IfModule mod_alias.c>

#Repoint old contact page to new contact page:
Redirect 301 /contact.php http://example.com/contact-us.php

</IfModule>

应该保留查询字符串,因为文档说:

匹配的 URL 路径之外的其他路径信息将附加到目标 URL。

于 2013-04-18T13:50:59.533 回答
0

它会将您的商店页面重定向到您的联系页面

    <IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteBase /
    Redirect 301 /storepage /contactpage
    </IfModule>
于 2016-09-29T00:50:37.873 回答