2009-08-11 9 views
17

お客様のために新しいPHPサイトを作成し、古いサイト構造のトップのGoogle結果を新しいサイト構造にリダイレクトしたい。GETパラメータを使用するとApache Redirect 301が失敗する?blah =

私は数十のリダイレクト301をドキュメントルートの.htaccessに入れましたが、うまくいくとうまくいくうちに他のものに問題があります。

これは正常に動作します:

Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152 

これは動作しません!

Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html 
Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html 

リダイレクトは.htaccessファイル内で混合され、GETパラメータでのみリダイレクトが失敗するように見える:(リダイレクトが単にスキップされるので、404に至ります)。

回避策はありますか?失敗したリダイレクトを無視することは、顧客にとってはオプションではありません。あなたの考えをありがとう。

答えて

15

Gumbo's answer's推論が正しいでしたが、私は彼のRewriteRuleが仕事を得ることができませんでした。

別のRewriteCondを追加しました。以下はテストされ、正常に動作します。

RewriteCond %{REQUEST_URI} /nl/index.php$ 
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
+2

'RewriteRule'の実際のパターンは、サーバ設定や.htaccessファイルと.htaccessファイルがどこにあるかによって異なります。 – Gumbo

12

RedirectはURLパスで動作しない:

古いURLパスはスラッシュで始まる大文字と小文字を区別(%が復号された)パスです。 [...]

だから、URLのクエリ(後の最初の#までの最初の?の後の部分)がチェックされません。

しかし、あなたはそれを行うためにmod_rewriteを使用することができます。

RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
RewriteCond %{QUERY_STRING} ^mID=24512&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/support/koppeling-met-omgeving.html [L,R=301] 
12
両方ガンボのとマルタインの答えに同意

...しかし:

RewriteCond %{REQUEST_URI} ^/nl/index.php$ 
:マルタインの中

誤植、「^」REQUEST_URI条件の正規表現を開始することがあるはずです

私も.htaccessファイルがあったところで、Gumboのものではなく、Martijnのものしか動かすことができませんでした。

また、パラメータ文字列をリライトで渡す必要がない場合は、「?」を追加する必要があります。 URLの末尾に:あなたのURLが/nl/index.php?mID=24511 & SUBID = 0その後、301永久リダイレクトでhttp://www.example.com/solutions/printsolutions.html?mID=24511&subID=0にリダイレクトされる場合

RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301] 

そうでない場合は、マルタインのコード以下は、」読み込みこのURLでさらに多くのルールを処理しないでください "

これは、あなたが望むものであってもなくてもよく、パラメータが理解できない場合には一般的なルールとして公平であり、害を及ぼすことなく単に無視される多分問題ではないでしょう。しかし、人間を新しいページにリダイレクトしたい場合、 "pretty URLs"が必要な場合は、パラメータ文字列を取り除くことが望ましいので、 "?"リンク先URLの末尾に

+0

グーグルポイントは、デフォルトのGET文字列パラメータを "?"終わりのサイン...それを探していた。 –

+1

?コメントはこの投稿の大きな部分です。 –

関連する問題