2009-09-14 186 views
41

重新设计网站后,我有几页需要重定向。一切都停留在同一个域上,只是重组和/或重命名了一些东西。它们的形式是:.htaccess 301单页重定向

/contact.php

现在是:

/contact-us.php

使用.htaccess文件,我已经添加了这一行,这是一个我觉得最推荐:

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

这主要是细 - 它的工作 - 问题是,它也重定向:

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

是否有指定我只想重定向根contact.php的一种方式?

+0

丹市建局不要......我想,但很久以前问.... – OpenWebWar 2016-02-08 07:15:00

回答

68

RedirectMatch使用与URL路径匹配的正则表达式。而你的正则表达式​​只是意味着任何URL路径,其中包含​​但不只是任何URL路径,正是​​。因此,使用锚的字符串(^$)的开始和结束。

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

谢谢,作品像一个魅力。 – Dan 2009-09-14 11:58:48

+0

当我使用类似www.domain.com/contact.php?location=12的方式进行此操作时,它会重定向到www.domain.com/home/mike/public_html/contact-us.php?location=12,但只有当在那里的论据。 – Mike 2013-03-19 19:02:39

+1

我通过在目标端输入完整的URL(http://)来修复它:“RedirectMatch 301 ^/contact \ .php $ http://www.domain.com/contact-us.php”。 – Mike 2013-03-19 21:21:50

18

这应该这样做

RedirectPermanent /contact.php /contact-us.php 
+0

我可以不明白为什么这应该解决问题。 “RedirectPermanent ...”与“重定向301 ...”相同。 – Gumbo 2009-09-14 11:56:43

+0

Gumbo,RedirectPermanent以(URL-Path)作为参数,RedirectMatch以(Regex URL)作为参数,因此,如果使用RedirectMatch而没有(^)来指定行的开头,则不起作用。使用RedirectPermanent也比正则表达式替代方法快得多。 – duckyflip 2009-09-14 11:59:11

+0

@duckyflip:对不起,你是对的。只用'重定向'误读'RedirectMatch'。但'重定向'只做前缀检查。 – Gumbo 2009-09-14 12:03:51

0

你也可以使用一个RewriteRule如果你想模板匹配和重定向的URL的能力。

+0

这是为什么被拒绝? – Ryall 2009-09-14 11:58:20

0

如果你喜欢使用simplest possible solution一个问题,到RedirectMatch另一种是更基本的,Redirect指令

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

<IfModule mod_alias.c> 

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

</IfModule> 
01超越匹配的URL路径

其他路径信息将 附加到目标URL:因为文档说个

查询字符串应结转。

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

有使用redirectmatch规则,然后有那么他们是完全一致的写你的链接是没有意义的。如果你不包括你不必排除!只需使用重定向不匹配,然后使用链接通常

+0

简单就好了。如果你不需要模式(正则表达式),那么这将是最有效的语法。 – jeffkee 2017-08-11 21:10:04

-1

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

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