2017-01-06 11 views
1

以外のすべての子ディレクトリをリダイレクト:Apacheは、私は次のURLを持っているので、1

www.example.com/parent/child1 
www.example.com/parent/child2 
www.example.com/parent/child3 
www.example.com/parent/cool-feature 
www.example.com/parent/product 
etc... 

私は新しいドメインにchild2以外のすべての子供たちをリダイレクトする必要があります。最後のスラッシュに

www.example.com/parent/child2/ 

ため
www.example.com/parent/child2 

ではなく:これは、のために働いている

RedirectMatch ^/parent(?!/child2) http://www.new-example.com/parent/ 


これまでのところ、私は出ています

無駄に

、私が試してみました:意図したとおりに

RedirectMatch ^/parent(?!/child2/) http://www.new-example.com/parent/ 
RedirectMatch ^/parent(?!/child2\/) http://www.new-example.com/parent/ 
RedirectMatch ^/parent(?!/child2)/ http://www.new-example.com/parent/ 
RedirectMatch ^/parent/(?!child2)/ http://www.new-example.com/parent/ 
+0

も' /親/ child2の/ '私は@DusanBajicに同意 –

+0

にリダイレクトされます、あなたの最初の' RedirectMatch'ディレクティブは私のために[OK]を動作するように表示されます。おそらく矛盾している他の指示がありますか? 'child1'、' child2'などのディレクトリ、ファイル、またはURLは、フロントコントローラにマッピングされていますか?私は後で推測するので、あなたはおそらく既存のmod_rewrite指令を持っていますか?また、間違った301がキャッシュされている場合に備えて、ブラウザのキャッシュをクリアしてください。 – DocRoot

+0

@DusanBajicはい、それは私が求めるものです。残念ながら '/ parent/child2 /'はリダイレクトしています。私はリダイレクトしたくありません。 – MonkeyZeus

答えて

2

をコメントで述べたように、それ自体で、あなたの最初のディレクティブが動作するはずです。 /parent/child2,/parent/child2/または/parent/child2/anythingのいずれもリダイレクトされません。

ただし、「フロントコントローラ」を含む「その他の指令」があるため、競合する可能性があります。特にフロントコントローラーはおそらくmod_rewriteを使用し、RedirectMatchはmod_aliasディレクティブです。 mod_rewriteは、明らかな順序が.htaccessであるにもかかわらず、常に最初に実行されます。しかし、これらのリダイレクトは、フロントコントローラーの前で最初に実行する必要があります。

これをmod_rewriteリダイレクトに変更し、フロントコントローラーの前に.htaccessファイルの上部にあることを確認してください。あなたのルール、どちらも `/親/ child2`で

RewriteRule ^parent(?!/child2) http://www.new-example.com/parent/ [R=302,L] 
+0

この回答ありがとうございます、非常に有望ですが、残念ながら私は月曜日までさらにテストを行うことができません。それまで、歓声! – MonkeyZeus

+0

この回答のアドバイスに続いて、私は残念なことに後続のスラッシュがあるときにリダイレクトを抑制することに成功しませんでした。私はベンダーに連絡し、彼らがそれを理解できるかどうかを見極めるつもりです。この答えは理論上正しいので、私はhtaccessファイルのすべてのルールを共有する自由がないので、私はこの答えを喜んで受け入れます。再度、感謝します! – MonkeyZeus

関連する問題