0

OK、私のブログ サイトmyurl.orgを別のドメインへのリンクと同じ数とします。

old.myurl.org?oldvar=foo

のみold.myurl.orgが存在しなくなり、 に置き換えられましたnew.myurl.org

クエリ文字列の vars が で同じだった場合、次を使用してnew.myurl.org書き直すことができると思います。.htaccess

RewirteCond %{http_host} ^old.myurl.org$ [NC]
RewriteRule ^(.*)$ new.myurl.org [L,R=301,QSA]

唯一の問題は、クエリ文字列 var を から に変更し、そのデータ (foo) を保持する必要があることoldvarですnewvar

さまざまな方法でクエリ文字列変数を書き換える方法の例はたくさんありますが、このシナリオの例を見つけることができないようです。

私は書き直す必要があります:

old.myurl.org?oldvar=foo

に:

new.myurl.org?newvar=foo

編集

さらに、いくつかの潜在的なクエリ文字列のキー値を考慮する必要がありますが、すべてが常に存在するわけではありません。

だから私は必要かもしれません:

old.myurl.org?oldvar=foo&oldvar2=bar --> new.myurl.org?newvar=foo&newvar2=bar

また

old.myurl.org?oldvar2=bar --> new.myurl.org?newvar2=bar

これは不可能かもしれませんが、クエリ文字列値の一部を削除する必要がある場合があります。そう?oldvar=foo{term}なる必要があるかもしれません?newvar=foo

再度、感謝します!

4

1 に答える 1

1

最初の条件はドメインに一致し、2 番目の条件はクエリ文字列に一致し、ルールはドメイン ルートに一致します。

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar=%1 [R=301,L]

複数のクエリ文字列を配置することもできます。

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$ [OR]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)&oldvar2=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar=%1&newvar2=%2 [R=301,L]

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar2=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L]

x/y/zコメントで言及したようなパスを使用するにはRewriteRule、たとえば、現在使用しているルールを変更すると、次のもののみがリダイレクトされyourdomain.com/?...ます。

RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L]

別のパスをキャッチしたい場合は、次のようにします。

RewriteRule ^x/?$ http://new.myurl.org/?newvar2=%1 [R=301,L]

上記はキャッチyourdomain.com/x?...し、yourdomain.com/x/?...

複数のパスを指定して、次のように OR 条件を使用することもできます。

RewriteRule ^(x|x/y|x/y/z)/?$ http://new.myurl.org/?newvar2=%1 [R=301,L]

上記は、 x/?...OR x?...ORx/y?...x/y/?...OR x/y/z?...ORを一致させたいことを意味しますx/y/z/?...

かっこでカプセル化し、|区切り記号として OR を使用します。

^andは最初から最後まで一致する$ことを意味するため、何も含まれていない場合は何も一致しないことを意味し、ルート フォルダーを意味domain.com/しますdomain.com/x

于 2013-08-01T20:42:48.693 に答える