web-dev-qa-db-ja.com

301リダイレクト+ RewriteRuleは一緒に動作しませんか?

301リダイレクトを使用して、同じWebサイト内の別のページにページをリダイレクトします。このページでは、RewriteRuleを使用してフレンドリURLのPHP変数を非表示にします。

.htaccessのリダイレクトコード:

Redirect 301 /example/Word1/Word2/Word3 http://www.example.com/Word1/Word2

その結果、/Word1/Word2/Word3にアクセスすると、/Word1/Word2?var1=Word1&var2=Word2&var3=Word3である以前のRewriteRuleによって設定されたURLにリダイレクトされます。ここで、var1、var2、およびvar3は、コンテンツWord1、Word2、およびWord3に含まれるPHP変数です。

リダイレクトをwww.example.com/Word1/Word2だけにしたい

1
user2348684

Redirect(mod_alias)をRewriteRule(mod_rewrite)に変更する必要があります。何かのようなもの:

RewriteRule ^Word1/Word2/Word3 /Word1/Word2 [R=301,L]

(必要に応じてexample/を差し戻しますが、私にはタイプミスのように見えましたか?)

あなたが経験している問題は、.htaccessファイル内のディレクティブの順序に関係なく、mod_rewrite(ほとんど)が常にmod_aliasの前に実行されることです。このため、これらのモジュールの両方からのディレクティブを混在させることは避けてください。

そして、bybeが示唆しているように、これが他の(内部)リライトの前に来ることを確認してください。そうしないと、同じ問題が発生する可能性があります。一般的に、外部リダイレクトは常に内部書き換えの前に来る必要があります。

2
MrWhite