似乎rewritemap没有考虑匹配url中的查询参数。请提出解决方案。
我在httpd.conf文件中的设置:
RewriteMap redirects dbm=db:/usr/local/apache/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]
重定向文件有url lile
/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个网址都只被定向到http://mysite.com。因此,似乎只对非查询部分进行匹配。
请帮忙。
答案 0 :(得分:3)
查看您的RewriteMap,您似乎不需要使用地图。 你可以在没有地图的情况下做到这一点:
RewriteCond %{QUERY_STRING} ^q\=([0-9]+)$
RewriteRule ^/same_url/(.*)$ http://example.com/q2=%1 [redirect=permanent,last]
注意RewriteRule中的%1
反向引用RewriteCond中的匹配。
如果您仍想使用重写映射,则可能必须将查询字符串“转换”为路径中的某些内容 规则可以是:
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