2016-12-09 17 views
0

リライトマップ内に数百のURLリダイレクト/リライトのリストがあります。ほとんどのURLには、リライトマップの特定のエントリに一致するクエリ文字列が含まれています。私はthis questionがクエリ文字列を書き換えマップに渡す方法を発見しました。これはうまくいきましたが、問題は現在のクエリ文字列が書き換えられたURLの末尾に追加されることです。たとえば、次のようにリライトマップを通過した後にURLの最後からクエリ文字列を削除します

Expected Rewrite: 
/subdir/dir.cfm?categoryID=123 -> https://example.com/subdir/endurl 

Actual Rewrite: 
https://example.com/subdir/endurl?categoryID=123 

Expected Rewrite 
/subdir/dir.cfm?videoID=3422424-131FDDFD-234 -> https://example.com/subdir/awesome/stuff 

Actual Rewrite: 
https://example.com/subdir/awesome/stuff?videoID=3422424-131FDDFD-234 

これは私が持っている書き換えルールです:

RewriteEngine on 

RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,R=301,L] 

どのように書き換えた後、URLに追加クエリ文字列を削除することができますか?私は、誰かが私がやっている何を達成するためのより良い方法を知っているかどうかわからないのですが

RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,C] 
RewriteRule (.*) $1? [L,R=301] 

EDIT

私は実際にこれがこれを使用して動作させることができましたか?私は、これは、クエリ文字列を含む別のURLにクエリ文字列を含むURLにリダイレクトする必要がある場合、これが壊れるかもしれないと思っています。

答えて

0
Apacheのバージョン2.4.0では

以降、あなたが[QSD]フラグ(クエリ文字列を破棄)を使用することができます:Apacheのバージョン2.2では

RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [QSD,NC] 

を、そこには[QSD]フラグはありませんが、代替URIが含まれている場合

RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}}? [NC] 

(あなたの新しく追加された書き換えルールが実際に使用しています。クエリ文字列は、RewriteRuleのデフォルトの動作は、ちょうどあなたの書き換えURIに?を追加することによって、あなたは同じ効果が得られますので、既存のクエリ文字列を破棄することですこの機能)

関連する問題