RewriteMap and Query String
2 posts
• Page 1 of 1
RewriteMap and Query String
I am trying to redirect a collection of URL's to new URLS. Half the URLS have query strings and half do not.
So I created two RewriteMap files, one with querystrings and one without.
In .htaccess, I define the maps first:
RewriteMap miller-map txt:redirect-map.txt [NC]
RewriteMap miller-map-qs txt:redirect-map-q.txt [NC]
I map the non query string requests like this:
RewriteCond %{REQUEST_URI} ^(.+)$ [NC]
RewriteCond ${miller-map:%1|NOT_FOUND} !NOT_FOUND
RewriteRule .? ${miller-map:%1} [NC,NE,R=301,L]
And this works properly, the pages all redirect nicely.
But when I try to use the querystring parameter, it is not matching:
RewriteCond %{REQUEST_URI} ^(.+)$ [NC]
RewriteCond ${miller-map-qs:%1?%{QUERY_STRING}|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.*) ${miller-map-qs:$1?%{QUERY_STRING}} [NC,NE,R=301,L]
When looking at the logs, it appears that it is passing in the query string as a literal (See Log Below). Therefore I am still getting 404 errors and my client is unhappy.
Is there a way to use a RewriteMap and Querystrings together?
Thanks in advance for all your help!
Joe
Log Files Entry:
------------------
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (1) [perdir d:\XXXXXX\XXXXXX\website\] init rewrite engine with /products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (5) [perdir d:\XXXXXX\XXXXXX\website\] strip matching prefix: /products/tig/product.php -> products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (3) [perdir d:\XXXXXX\XXXXXX\website\] applying pattern ^(.*) to uri products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='/products/tig/product.php' pattern='^(.+)$' => matched
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='${miller-map-qs:/products/tig/product.php?{QUERY_STRING}|NOT_FOUND}' pattern='!NOT_FOUND' => not-matched
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (5) [perdir d:\XXXXXX\XXXXXX\website\] strip matching prefix: /products/tig/product.php -> products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (3) [perdir d:\XXXXXX\XXXXXX\website\] applying pattern .? to uri products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='/products/tig/product.php' pattern='^(.+)$' => matched
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='NOT_FOUND' pattern='!NOT_FOUND' => not-matched
Redirect-map.txt
---------------
/products/multiprocess/pipepro_welding_system/ /en/equipment/welders/multiprocess
/products/enginedriven/ /en/equipment/welders/engine-driven
/products/enginedriven/big_blue_400/ /en/equipment/welders/engine-driven
/products/enginedriven/big_blue_500/ /en/equipment/welders/engine-driven
redirect-map-q.txt
---------------
/products/tig/product.php?model=M00152 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M08950 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M00356 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M00224 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M00120 /en/equipment/welders/tig-gtaw
So I created two RewriteMap files, one with querystrings and one without.
In .htaccess, I define the maps first:
RewriteMap miller-map txt:redirect-map.txt [NC]
RewriteMap miller-map-qs txt:redirect-map-q.txt [NC]
I map the non query string requests like this:
RewriteCond %{REQUEST_URI} ^(.+)$ [NC]
RewriteCond ${miller-map:%1|NOT_FOUND} !NOT_FOUND
RewriteRule .? ${miller-map:%1} [NC,NE,R=301,L]
And this works properly, the pages all redirect nicely.
But when I try to use the querystring parameter, it is not matching:
RewriteCond %{REQUEST_URI} ^(.+)$ [NC]
RewriteCond ${miller-map-qs:%1?%{QUERY_STRING}|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.*) ${miller-map-qs:$1?%{QUERY_STRING}} [NC,NE,R=301,L]
When looking at the logs, it appears that it is passing in the query string as a literal (See Log Below). Therefore I am still getting 404 errors and my client is unhappy.
Is there a way to use a RewriteMap and Querystrings together?
Thanks in advance for all your help!
Joe
Log Files Entry:
------------------
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (1) [perdir d:\XXXXXX\XXXXXX\website\] init rewrite engine with /products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (5) [perdir d:\XXXXXX\XXXXXX\website\] strip matching prefix: /products/tig/product.php -> products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (3) [perdir d:\XXXXXX\XXXXXX\website\] applying pattern ^(.*) to uri products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='/products/tig/product.php' pattern='^(.+)$' => matched
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='${miller-map-qs:/products/tig/product.php?{QUERY_STRING}|NOT_FOUND}' pattern='!NOT_FOUND' => not-matched
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (5) [perdir d:\XXXXXX\XXXXXX\website\] strip matching prefix: /products/tig/product.php -> products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (3) [perdir d:\XXXXXX\XXXXXX\website\] applying pattern .? to uri products/tig/product.php
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='/products/tig/product.php' pattern='^(.+)$' => matched
38.122.83.3 38.122.83.3 [19/Jun/2015:14:06:02] [website.com/sid#2][rid#44872272/initial] (4) [perdir d:\XXXXXX\XXXXXX\website\] RewriteCond: input='NOT_FOUND' pattern='!NOT_FOUND' => not-matched
Redirect-map.txt
---------------
/products/multiprocess/pipepro_welding_system/ /en/equipment/welders/multiprocess
/products/enginedriven/ /en/equipment/welders/engine-driven
/products/enginedriven/big_blue_400/ /en/equipment/welders/engine-driven
/products/enginedriven/big_blue_500/ /en/equipment/welders/engine-driven
redirect-map-q.txt
---------------
/products/tig/product.php?model=M00152 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M08950 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M00356 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M00224 /en/equipment/welders/tig-gtaw
/products/tig/product.php?model=M00120 /en/equipment/welders/tig-gtaw
Re: RewriteMap and Query String
Hello Joe,
Let's try to have it like this:
RewriteCond %{REQUEST_URI} ^(.+)$
rewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond ${miller-map-qs:(%1\?%2)|NOT_FOUND} !NOT_FOUND
RewriteRule .? ${miller-map-qs:(%1\?%2)} [NC,NE,R=301,L]
Let's try to have it like this:
RewriteCond %{REQUEST_URI} ^(.+)$
rewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond ${miller-map-qs:(%1\?%2)|NOT_FOUND} !NOT_FOUND
RewriteRule .? ${miller-map-qs:(%1\?%2)} [NC,NE,R=301,L]
2 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 28 guests