0

rewritemap は、一致する URL でクエリ パラメータを考慮していないようです。解決策を提案してください。

httpd.conf ファイルでの私のセットアップ:

RewriteMap redirects dbm=db:/usr/local/apache/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

リダイレクト ファイルには URL が含まれています

/same_url/ http://mysite.com/
/same_url/?q=1 http://mysite.com/q2=1
/same_url/?q=2 http://mysite.com/q2=2
/same_url/?q=3 http://mysite.com/q2=3

しかし、4 つの URL はすべてhttp://mysite.comのみに向けられています。したがって、マッチングは非クエリ部分に対してのみ行われるようです。

助けてください。

4

1 に答える 1

3

RewriteMap を見ると、マップを使用する必要がないようです。マップなしでそれを行うことができます:

RewriteCond %{QUERY_STRING} ^q\=([0-9]+)$
RewriteRule ^/same_url/(.*)$ http://example.com/q2=%1 [redirect=permanent,last]

%1RewriteCond 内の一致を参照する RewriteRule 内の に注意してください。

それでも書き換えマップを使用する場合は、クエリ文字列をパス内の何かに「変換」する必要がある場合があります。ルールは次のようになります。

RewriteCond %{QUERY_STRING} ^q\=([0-9]+)$
RewriteRule ^/(.*)$ /$1/q=%1   <-- here the GET param is transformed to something in the path

RewriteMap redirects dbm=db:/usr/local/apache/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

GET パラメータを考慮しないものにマップを変更する必要があります。

/same_url/ http://example.com/
/same_url/q=1 http://example.com/q2=1
/same_url/q=2 http://example.com/q2=2
/same_url/q=3 http://example.com/q2=3
于 2013-06-01T19:37:40.993 に答える