リダイレクトに問題があり、これを機能させることができませんでした。次のものを作りたい
http://www.example.com/seasonal/christmas?p=15
にリダイレクト
http://www.example.com/holiday-decor/christmas.html
リダイレクトされたURLにクエリ文字列が表示されないように、誰かが書き換えルールを手伝ってくれるかどうか疑問に思っていました。 Magentoプラットフォームサイトで。htaccessを使用しています。
デフォルトでは、リクエストされたURLのクエリ文字列は、書き換えられた/リダイレクトされたURLに追加されます。
Apache 2.4以降QSD
ディレクティブでRewriteRule
(クエリ文字列破棄)フラグを使用して、discardからのクエリ文字列をリダイレクトされたURL。例えば:
RewriteCond %{QUERY_STRING} =p=15
RewriteRule ^seasonal/christmas$ /holiday-decor/christmas.html [QSD,R=301,L]
RewriteCond
ディレクティブは、要求されたURLのクエリ文字列部分と一致するために必要です。 (RewriteRule
パターンと一致するURLはURLパスのみです。これは、クエリ文字列を特に除外します。)CondPattern=
の=p=15
プレフィックスは、 (正規表現ではなく)リテラルの「文字列」の一致。したがって、p=15
と完全に一致します。
Apache 2.2以前では代わりに、RewriteRule
置換の最後に?
を追加して、クエリ文字列を削除する必要があります。これは本質的に空白クエリ文字列を書き込みます(?
は実際にはリダイレクトされたURLの一部にはなりません)。 substitution stringにクエリ文字列を追加すると、リクエストのクエリ文字列が上書きされることに注意してください。 (この状況で元のクエリ文字列も追加する必要がある場合は、QSA
フラグ-Query String Append-が必要ですが、それ以外の場合、このフラグは不要です。)
たとえば、Apache 2.2では、上記のRewriteRule
ディレクティブを次のように変更します。
RewriteRule ^seasonal/christmas$ /holiday-decor/christmas.html? [R=301,L]
注意:?
の追加はApache 2.4でも機能します。ただし、QSD
フラグを使用することをお勧めします。 2つの方法は同じではありません。