3

私はいくつかの厄介な古いURLを持っています...

http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1

http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2

...より新しい、よりクリーンなフォームにリダイレクトしたい...

http://www.example.com/page.php/welcome

http://www.example.com/page.php/prices

簡単なリダイレクトで1つのページを別のページにリダイレクトできることを理解しています。

リダイレクト301/bunch.of /unneeded/craphttp ://www.example.com/page.php

ただし、ソースページは変更されず、GET変数のみが変更されます。これらのGET変数の値に基づいてリダイレクトする方法がわかりません。誰かがplsを助けることができますか!?私は古い正規表現をかなり便利にしているので、必要に応じてmod-rewriteを使用することができますが、GET変数を書き換える構文が明確ではないため、パフォーマンスの低下を避けて、よりクリーンなリダイレクトディレクティブ。方法はありますか?そうでない場合は、正しいmod-rewrite構文plsについて誰かが私を手がかりにできますか?

乾杯、

ロジャー。

4

3 に答える 3

5

URL クエリのパラメーターは任意の順序である可能性があるため、チェックするパラメーターごとに1 つのRewriteCondディレクティブを使用するか、可能な順列ごとに 1 つのディレクティブを使用する必要があります。

RewriteCond各パラメーターのディレクティブを使用した例を次に示します。

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=1(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/welcome? [L,R=301]

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=2(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/prices? [L,R=301]

しかし、ご覧のとおり、これは混乱する可能性があります。

したがって、より良いアプローチは、を使用することRewriteMapです。最も簡単なのは、キーのペアを含むプレーン テキスト ファイルです。

1 welcome
2 prices

マップを定義するには、サーバーまたは仮想ホストの構成に次のディレクティブを記述します (このディレクティブは、ディレクトリごとのコンテキストでは許可されません)。

RewriteMap examplemap txt:/path/to/file/map.txt

次に、1 つのルールだけが必要になります。

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=([0-9]+)(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/%{examplemap:%2}? [L,R=301]
于 2009-05-16T08:27:01.973 に答える
1
RewriteCond %{QUERY_STRING} option=com_content&task=view&id=70&Itemid=82
RewriteRule ^index.php http://www.example.com/business/banks/? [R=301,L]

? ユーザーが送信される URL に元のページと同じクエリ文字列が含まれないようにします。

于 2010-07-24T00:25:34.493 に答える
0

RedirectMatch要約すると、クエリ文字列を含む完全なURLに一致する正規表現で使用できます。これにより、URLの一部を再配置できますが、「opendocument&part = 1」から「welcome」(新しいURLが元のURLとは完全に異なる)などの変換を行う必要がある場合は、RewriteMap-またはおそらくより良い、すべてのURLをに送信しpage.php、PHPでクエリ文字列を解析するだけです。

編集:リダイレクトしたいURLがほんの数個の場合は、おそらく次のような個別のルールを書き出すことができます。

RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1 http://www.example.com/page.php/welcome
RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2 http://www.example.com/page.php/prices
于 2009-05-16T02:17:17.290 に答える