0

最近 EE2 に更新した古いサイトの URL がたくさんあります。これらの URL は次のようになります:
http://www.example.com/old/path.asp?dir=Folder_Name

これらの URL は、http: //www.example.com/new_path/folders/folder_nameにリダイレクトする必要があります。

Folder_Nameすべての文字列が URL セグメントと一致するわけではないfolder_nameため、これらはおそらく静的リダイレクトである必要があります。

「example1」という新しいサイトのページにマップされる「Example_One」という特定のフォルダーに対して、次のルールを試しました。

Redirect 301 /old/path.asp?dir=Example_One
             http://www.example.com/new_path/folders/example1

しかし、これはうまくいきません。リダイレクトする代わりに、 http://www.example.com/old/path.asp?dir=Example_Oneが見つからないという 404 エラーが表示されます。

編集:
ここにも二次的な問題があり、関連する場合と関連しない場合があります:次のようなキャッチオールルールがあります:
リダイレクト 301 /old/path.asp http://www.example.com/new_path

このルールを使用すると、上記の最初のようなリクエストは
http://www.example.com/new_path?dir=Folder_Nameにリダイレクトされ、404 エラーがトリガーされます。

4

1 に答える 1

0

mod_rewrite の適切な構文を見つけるために、Google をもう少し精査する必要がありました。

上記の例を使用すると、次のようになります。

RewriteCond %{QUERY_STRING} ^dir=Example_One$
RewriteRule ^/old/path\.asp$ /new_path/folders/example1? [R=301,L] 

これにより、上記の問題の両方が修正されます。なぜ EE がクエリ文字列の 1 つのパラメーターで 404ing するのか、その問題はまだ解決されていませんが、これはその問題の回避策として機能します。

パラメータの値が毎回異なる特定のページに URL をリダイレクトすることもできます。この 1 つの例は、Google UTM キャンペーン トラッキングです (トラッキング クエリ文字列が 404 をトリガーするこのような状況で):

リンク: http://www.example.com/?utm_source=xxx& ..... (トリガー 404)
リダイレクト先: http://www.example.com

RewriteCond %{QUERY_STRING} ^utm_source=
RewriteRule ^$ http://www.example.com? [R=301,L] 

注: これは、^$ で定義されているように、これらの要求のみをホームページにリダイレクトします。utm リクエストを別のページにリダイレクトする場合は、その RewriteRule の最初の部分を変更する必要があります。

于 2010-12-28T18:55:21.623 に答える