1

私の特定のシナリオに対する質問や答えを見つける人が見つかりません。

大量の静的な製品と情報ページがある古いeコマースサイトを、新しい場所(ルートの新しいフォルダー)にインストールされた新しいeコマースソフトウェアパッケージに移動しています。 http://domain.comからhttp://domain.com/newstoreへ

サイト全体を新しい場所にリダイレクトできることは知っていますが、新しいサイトの多くはeコマースソフトウェアから動的に実行され、製品ページのアドレスは古いものにさえ近くないため、それは機能しません。

RedirectMatchを使用して、リダイレクトする必要があることがわかっているすべての製品ページに対して個別の書き換えを作成しました。新しいストアのホームページにリダイレクトするために見逃した可能性のあるページが必要になりましたが、わからないものをリダイレクトすることはできません。それで、私の問題があります。私が設定している200のRedirectMatchルールを台無しにすることなく、残ったページをホームページにリダイレクトするにはどうすればよいですか?

4

1 に答える 1

1

RedirectMatchこれはmod_aliasであり、mod_rewriteではないことに注意してください。両方からのディレクティブが同じURIに適用される場合、2つのモジュールは常に互いにうまく機能するとは限りません。サイトがどのように設定されているかわからない場合、質問に答える方法はありませんが、*mod_rewrite*を使用して次のようなことを試すことができます。

RewriteEngine On
# Check that the request isn't for an existing resource
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Check that the request isn't for the new store
RewriteCond %{REQUEST_URI} !^/newstore
# redirect to the new store
RewriteRule ^ /newstore/ [L,R]

ここでの理由は、リクエストが既存のページ、画像、スクリプト、404になる可能性のあるものに対するものではなく、リクエストが/newstoreフォルダ内の動的サイトに対するものでない場合は、リダイレクトするためです。/newstore/フォルダに。

しかし、私が言ったように、200個のRedirectMatchディレクティブがあり、mod_aliasはmod_rewriteで常にうまく機能するとは限りません。それらすべてを書き換えルールに変換する必要があるかもしれませんが、おそらく必要ではありません。例:

RedirectMatch 301 ^/old-path/old-page.html$ /newstore/?page=123

次のように翻訳されます:

RewriteRule ^/old-path/old-page.html$ /newstore/?page=123 [L,QSA,R=301]

これらの書き換えルールはすべて、**すべての404を/newstore*にリダイレクトする上記のルールの前にある必要があります。これは最後の手段のような「キャッチオール」ルールであるため、通常のリダイレクトをすべて実行する必要があります。

于 2013-01-08T00:05:59.913 に答える