2

6つほどのファイルを除いて、フォルダ全体のコンテンツが不要になり、ホームページにリダイレクトされるという状況があります。フォルダには300を超えるファイルが含まれているため、個々のリダイレクトは次のようになります。

redirect 301 /folder/file.html http://www.domain.tld/
redirect 301 /folder/file2.html http://www.domain.tld/
redirect 301 /folder/file3.html http://www.domain.tld/

これにはかなり長い時間がかかります。これが必要になるまでに少し時間があります。mod_rewriteで小さな正規表現を使用してこれを実現するための良い方法を誰かが知っているかどうかを知りたいと思います。

潜在的な正解を使用する可能性のあるすべての人を最適に理解するために、リダイレクトしたくないファイルを次のように設定します。

/folder/stay1.html
/folder/stay2.html
/folder/stay3.html

まだ学ぶことがいくつかある私たちの人々を助けてくれる非常に知識豊富な人々のこの素晴らしいコミュニティに事前に感謝します!

編集

これを達成し、フォルダのベースURLを保持することは可能ですか?

/folder/
/folder/index.html

私は成功せずに次のことを試みました:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder(/|/index.html|/stay1.html|/stay2.html|/stay3.html|/etc.html)
RewriteRule ^/?folder/ http://www.domain.tld/ [L,R=301]

正解を編集

答えてくれたJonLinに大いに感謝します。

/folder/アクセスを許可しながら、いくつかを除くすべてのファイルをリダイレクトする正しい方法/folder/は次のとおりです。

RewriteEngine On

# Allow /folder/ to remain accessible
RewriteCond %{REQUEST_URI} !^/folder/$

# Allow specified files to remain accessible
RewriteCond %{REQUEST_URI} !^/folder/(index.html|stay1.html|stay2.html|stay3.html|etc.html)

# Redirect all non-specified files to home page
RewriteRule ^/?folder/(.+)$ http://www.domain.tld/ [L,R=301]
4

2 に答える 2

2

mod_rewriteを使用すると、リダイレクトに対する例外条件を作成できます。これらのルールをドキュメントルートのhtaccessファイルに入れてみてください。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder/$
RewriteCond %{REQUEST_URI} !^/folder/(index.html|stay1.html|stay2.html|stay3.html|etc.html)
RewriteRule ^/?folder/(.+)$ http://www.domain.tld/ [L,R=301]

したがって、リストにあるものはすべて(stay1.html|stay2.html|stay3.html|etc.html)、条件に失敗し、リダイレクトは発生しません。そうしないと、で始まるものはすべて/folder/にリダイレクトされhttp://www.domain.tld/ます。

mod_aliasリダイレクトが混在している場合、それらが互いに干渉する可能性があることに注意してください。

于 2012-09-17T17:21:06.623 に答える
1

次のように、ネガティブな先読みでRedirectMatchを使用できます。

RedirectMatch permanent ^/?folder/(?!(stay1\.html|stay2\.html|stay3\.html)) http://domain.tld

別のmod-rewriteソリューションは次のようになります。

RewriteRule ^/?folder/(stay1\.html|stay2\.html|stay3\.html)$ - [L]
RewriteRule ^/?folder/.* http://domain.tld

最初のルールはすべての例外をキャッチし、Lフラグはこのパスでそれ以上の処理が行われないこと-を保証し、エンジンに書き換えを行わないように指示し、それ以上のパスが行われないようにします。最初のルールでキャッチされなかったものはすべて、2番目のルールでリダイレクトされます。

于 2012-09-17T17:24:42.023 に答える