'How to rewrite URL GET parameters
I have a URL
https://example.com/cart?prdid=223
I want to redirect it to
https://example.com/cart/223
using .htaccess
i've tried to use
RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)prdid=(.*)$
RewriteRule ^cart/(.*)$ /cart/$1?prdid=%1 [L,R]
But it does not work.
Solution 1:[1]
Rewrite rules have the pattern to match first, then the result you want.
The pattern you need to match is the current URL, which just ends "/cart", with no extra slash or word on the end of it, so instead of cart/(.*)$ you just want cart$
Then the result you want has the ID directly in the URL, not in the query string, and there's nothing for $1 to refer to, only %1 from the RewriteCond line. So instead of /cart/$1?prdid=%1 you just want /cart/%1
Once you've fixed that, the browser will redirect to the new URL. To actually make that URL work, you'll probably need a second rule, without the R flag, to tell Apache what to do when it sees the "pretty" URL. That one will have cart/(.*)$ as the pattern to match, but no condition on the query string, and $1 in the result part, not %1
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | IMSoP |
