2017-01-23 1 views
3

1つのクライアントに対して新しいWebサイトを作成しましたが、現在はすべてのリダイレクトを.htaccessファイルで行っています。私は、下の行でソースURLの部分について少し混乱していました。 これらの2行は同じ方法で動作しますか?.htaccessのこれらの2つのリダイレクトの違いと、これらの2つのリダイレクトの書き方

Redirect 301 /shop/contact-us http://www.example.com/contact-us/ 
Redirect 301 /shop/contact-us/ http://www.example.com/contact-us/ 
+2

違いは明らかに末尾のスラッシュです。末尾のスラッシュだけが異なる場合でも、パスは異なると見なされます。しかし、この指示は両方の場合で同じ方法で適用されます。 –

+0

@RuslanOsmanov .htaccess –

+1

RedirectMatch 301 "^/shop /(contact-us)/?"のリダイレクトを使用して、これら2つのURLをhttp://www.example.com/contact-us/にリダイレクトするにはどうすればいいですか? http:// www.example.com/$ 1/'と入力します。 'リダイレクト'はそれほど適切ではありません。質問を更新してください。それ以外の場合は、 –

答えて

1

/shop/contact-usを任意の末尾にスラッシュを付けてhttp://www.example.com/contact-usにリダイレクトする場合は、Redirectディレクティブはあまり適切ではありません。代わりにRedirectMatchディレクティブを使用してください:

RedirectMatch 301 "^/shop/(contact\-us)/?" http://www.example.com/$1/ 

  • ^ "は、行の先頭" を意味アンカーです。
  • /?は、ゼロまたは1つのスラッシュ文字に一致します。
  • (contact\-us)は($1によって参照される)捕捉基

注のみ^アンカーが使用されるので、正規表現は、唯一のプレフィックスに一致します。あなたは、例えば、式は厳しいようにするために$(行の終わり)アンカーを使用することができます。:

/*がゼロ以上のスラッシュを意味
RedirectMatch 301 "^/shop/(contact\-us)/*$" http://www.example.com/$1/ 

+0

あなたはこのリダイレクト/ショップ/連絡先 - 私達&/ shop/contact-us /またはリダイレクト/ショップ/ contact-us/ABCのようにあなたに求めているものは不明ですか? –

+0

@ Keyur、両方をリダイレクトします。最初のものだけが必要な場合は、 '$'アンカーを使用してください。 'RedirectMatch 301 '^/shop /(contact \ -us)/ * $ http:// www.example.com/$ 1 /'、 '/ *'は0以上のスラッシュを意味します –

+0

okありがとう@RuslanOsmanov –

-1

リストされているソースURLは、末尾にスラッシュが付いているため一意で、異なっています。

実際に注文は、別名で問題になることがあります。

我々は次のようしている場合:

Redirect 302 '/foo/' 'http://example.com/foo.php' 
Redirect 302 '/foo' 'http://example.com/bar.php' 

そして、我々はhttp://example.com/foo.phpに一時的なリダイレクトを得るでしょう/foo/をご覧ください。 /fooにアクセスすると、一時的にhttp://example.com/bar.phpにリダイレクトされます。

しかし、我々は順序変更した場合:

Redirect 302 '/foo' 'http://example.com/bar.php' 
Redirect 302 '/foo/' 'http://example.com/foo.php' 

そして/foo/を訪問し、奇妙な最初のパターン/fooが一致すると、あなたがhttp://example.com/bar.phpで終わるだろう!

私はより具体的な(より長いソースURLを書く)傾向があります。

mod aliasのリダイレクトを使用していくつかの非常に奇妙な結果が得られることがあります。ですから、RedirectMatchを使って特定のパターンマッチを書くか、代わりにmodリライトを使用してください。あなたは両方欲しいかのように

あなたのケースではそれが見えます:

/shop/contact-us 

/shop/contact-us/ 

を同じURLにリダイレクトするには。だから、単純に一つのルールを省略することができ、ちょうど使用:

Redirect 301 /shop/contact-us http://www.example.com/contact-us/ 

をしかし、おそらく歴史的に、あなたは、同じまたは異なるリソースにアクセスするには、両方のパターンを使用しているので、両方をリストする方がよい(しかし、順序を変更する)ことがあります。

関連する問題