web-dev-qa-db-ja.com

単一ページの.htaccess 301リダイレクト

サイトの再設計後、リダイレクトが必要なページがいくつかあります。すべてが同じドメインにとどまり、ほんの2、3の事柄が再編成または名前変更されました。それらは次の形式です。

/contact.php

今です:

/contact-us.php

.htaccessファイルを使用して、次の行を追加しました。これは、最もお勧めの行です。

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

これはほとんど問題ありません-それは仕事をします-問題は、それもリダイレクトします:

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

ルートのcontact.phpのみをリダイレクトすることを指定する方法はありますか?

55
Dan

RedirectMatch は、URLパスと照合される正規表現を使用します。そして、正規表現/contact.phpは、単に/contact.phpを含むすべてのURLパスを意味しますが、単に正確に/contact.phpであるURLパスを意味します。そのため、文字列の開始と終了にアンカーを使用します(^および$)

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

これはそれを行う必要があります

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

Redirectmatchルールを使用しても意味がなく、完全に一致するようにリンクを記述する必要があります。含めない場合、除外する必要はありません!一致せずにリダイレクトを使用してから、通常どおりにリンクを使用します

8
Jon

URLをテンプレートに一致させてリダイレクトする機能が必要な場合は、 RewriteRule を使用することもできます。

0
Ryall

問題に対して 最も簡単な解決策 を使用したい場合は、 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>

ドキュメントには次のように記述されているため、クエリ文字列を引き継ぐ必要があります。

一致したURLパス以外の追加のパス情報がターゲットURLに追加されます。

0
JW.