2011-06-29 11 views
0

クエリ文字列を持つ/のすべての要求により、404がトリガされています。クエリ文字列の前に/shop/を追加すると、内部的にリダイレクトされ、404がトリガーされないことがわかりました。ディレクトリにリダイレクトし、クエリ文字列を保持

私はの形式でURLを取る一般的なmod_rewriteのルールが必要です。

http://www.example.com/?foo=bar 

とにリダイレクト:

クエリ文字列は、(何でもかまいません)に保存されて
http://www.example.com/shop/?foo=bar 

を。

+0

私はあなただけの1リライトを持つようにしたい理解として(リダイレクトしない) '/?FOO = bar'が要求されたときに、それが実際に実行されます' /ショップ/?FOO = bar'になります(URL同じままです)、そうですか? – LazyOne

+0

何らかの理由でホームページ '/'が*任意の*クエリ文字列が存在するときに404を返しますが、 '/ shop /'はうまく動作します。リライトまたはリダイレクトは、「foo」だけでなく、任意の数のクエリパラメータと任意のパラメータ名に対して機能するはずです。 – Jazzerus

答えて

0

これはをリダイレクトhttp://www.example.com/shop/クエリ文字列を持っていること(例えばhttp://www.example.com/)ROOTにすべてのヒットを(URLは変更されます)します。

RewriteEngine On 
RewriteBase/

RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^$ http://www.example.com/shop/ [QSA,R,L] 

これは内部を書き換えるhttp://www.example.com/shop/クエリ文字列を持っていること(例えばhttp://www.example.com/)ROOTにすべてのヒット(URLはブラウザで同じままになります)します。

RewriteEngine On 
RewriteBase/

RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^$ /shop/ [QSA,L] 
+0

私はサイトがMiva Merchantに建てられており、/ shop /が自動的に/内部でリダイレクトされると述べておきます。 RewriteRuleを追加すると、無限のリダイレクトループが発生します。私は内部的に/にリダイレクトされたときにクエリ文字列が削除されるので、クエリ文字列を持つURLにのみ適用されるルールが必要です。 – Jazzerus

+0

@Jazzerus他の**「小さな微妙なニュアンス」**には何がありますか?これは既に**すべて** **変更し、あなたの既存のリダイレクトがどのように行われているかを知らなくても(Miva Merchant)、私が思い付くことができるすべては、最高で「野生の推測」に過ぎません。あなたは、既存の書き換えルールを調べ、それがうまくいかない理由を見つけなければなりません。 – LazyOne

+0

おそらく私の質問ははっきりしていないと思います。私は、クエリ文字列がある場合にのみ動作するソリューションが必要でした。ユーザーがクエリ文字列なしでexample.comにアクセスすると、example.com/shopにリダイレクトしないでください。 – Jazzerus

関連する問題