0

使い方は正しいですか

 RewriteRule .? http://www.newdomain.com%{REQUEST_URI} [L,R=301]

すべてのページを古いドメインから新しいドメイン (404 を含む) にリダイレクトするには?

私はhtaccessの1つにそれを持っています。それは機能しますが、それが正しいかどうかはわかりません。

4

2 に答える 2

0

それは機能しますが、それは私が行う方法ではありません。これ.?は、「URL に 0 または 1 の任意のものが含まれている」という意味であり、すべてを照合する少し奇妙な方法です。

私がアプローチする方法は、一致した URL を「キャプチャ」し、それをターゲットで使用することです。

 RewriteRule ^(.*)$ http://www.newdomain.com$1 [L,R=301]

ここで、.*は「何にでも一致」を意味し、^$は URL の最初と最後を表し、「すべてに一致」$1し、 は最初の (そしてこの場合のみ) 括弧のセットで一致したものを参照します。

今見てみると、もっと複雑に見えますが、一部の URL のみを一致させたい場合やターゲットを別の方法で構築したい場合に必要なルールにより似ています。

于 2013-05-15T16:05:13.550 に答える
0

REQUEST_URI を使用した OP のソリューションは適切であり、よく見られる ^(.*)$ および $1 を使用するよりも望ましい方法です。

理由:

  • REQUEST_URI は、末尾のスラッシュが欠落しているパスを正しく保持します (これは $1 では行われません)。したがって、完全にolddomain.com/pathリダイレクトされます。newdomain/path$1 のみolddomain.com/path/がリダイレクトされnewdomain/path/ますが、末尾のスラッシュが欠落しているパス セグメントは削除されます。
  • REQUEST_URI は、$1 ソリューションで追加の QSA フラグを必要とするクエリ文字列を正しく保持します。

私が提案する小さな改善点は 1 つだけ
です。マッチング パターンをさらに短くすることです。単一のキャレットで何にでも一致します。

RewriteRule ^ http://www.newdomain.com%{REQUEST_URI} [L,R=301]
于 2016-04-13T09:21:00.320 に答える