How can I rewrite query parameters to path parameters in Apache? How can I rewrite query parameters to path parameters in Apache? apache apache

How can I rewrite query parameters to path parameters in Apache?


These are known as RewriteRules, and they are fairly straightforward:

RewriteEngine onRewriteRule ^about$ /index.php?app=about

Here's the documentation

As far as making it more generic, how about this:

RewriteEngine onRewriteRule ^([A-Za-z]+)$ /index.php?app=$1

This will make any request to something like /staff or /contact redirect to index.php?app=[staff|contact]


Use this in your .htaccess

RewriteEngine onRewriteBase /your-site # only if neccessaryRewriteRule ^([^/])$ index.php?app=$1 [R,L]

EDIT

I added the L flag meaning process this as the last rule, and the R flag which by itself does not change the URL .. just rewrites internally. Doing R=301 will forward the browser to the rewritten page, which is useful for debugging.


Creating a general .htaccess getting the path requested can be done with the following line:

RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B]

This will give you the path requested escaped properly so if the requested path is /hello/world you will get hello%2Fworld in the path parameter. Use the PHP function urldecode() to get the original format.

Works only if the url ends with '/'.

NOTE If you have other rewrites in the same file you should place this one last as it will match basically anything.