簡體   English   中英

RewriteMap不適用於帶有查詢參數的URL

[英]RewriteMap not working for urls with query params

似乎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 因此,似乎只針對非查詢部分進行了匹配。

請幫忙。

查看您的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM