0

今日はいくつかのメンテナンスを行い、Webフォーラムを/forumsからドメインのルートフォルダーに移動しました。

リダイレクト301を.htaccessファイルに入れます。

Redirect 301 /forums/ http://www.ourforums.com/

ただし、以前は重複した/forumsフォルダーを含むリンクがいくつかありました。つまり、www.ourforums.com / forums / forums / forum.1

明らかに、上からのリダイレクトは/forum.1につながりますが、これは存在しません。古いリンクが実際にwww.ourforums.com/boards/forum.1を指していることを望みます。私は次のようなものを使おうとしました:

RewriteRule ^/forums/forums http://www.ourforums.com/boards/ [NC,R=301,L]

私が何を試したかに関係なく、リダイレクトの前に配置したかどうかに関係なく、リダイレクトは同じファイルに配置したRewriteRulesに取って代わるようです。

リダイレクトの前にRewriteRuleが確実に処理されるようにする方法はありますか?

4

3 に答える 3

2

これは、mod_alias(Redirectディレクティブ)とmod_rewrite(RewriteRuleディレクティブ)が競合しているためです。どちらもURLファイルマッピング処理パイプラインで役割を果たし、URIが処理され、書き換えられ、フラグが付けられ、最終的にリソースと応答にマッピングされます。適用されるRedirectルールがあり、応答にリダイレクトのフラグが付けられています。ディレクティブに関することRedirectは、2つのパスノードを相互に接続することです。つまり、次のことを意味します。

/forums/

に接続されています

http://www.ourforums.com/

そのため、フォルダの下にあるものもすべて/forumsリダイレクトされます。これがキャッチしている理由^/forums/forumsです。

mod_rewriteだけに固執するか、以下RedirectMatchを除外するを使用することができ/forums/forumsます。

RewriteRule ^/forums/forums(.*)$ http://www.ourforums.com/boards$1 [NC,R=301,L]
RewriteRule ^/forums/(.*)$ http://www.ourforums.com/$1 [NC,R=301,L]

また

RedirectMatch 301 ^/forums/(?!forums)(.*)$ http://www.ourforums.com/$1
于 2012-10-10T21:32:56.560 に答える
0

そのようなリダイレクトステートメントを手動で追加すると、私にとってはうまくいくようです:

Redirect /forums/forums/forum.1 http://www.ourforums.com/boards/forum.1
于 2012-10-11T13:17:33.440 に答える