I’ve got some project where I redirect every request on index.php, with various GET parameters.
Currently, I’m using this kind of htaccess (this is only an extract, and I changed parameters name to a, b, c..., in order to simplify the problem) :
RewriteRule ^([\w-]+)\.html$ index.php?a=$1 [L]
RewriteRule ^([\w-]+)/([\w-]+)\.html$ index.php?a=$1&b=$2 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)\.html$ index.php?a=$1&b=$2&c=$3 [L]
(...)
It works (well), but I was thinking about a way to minify those lines into a single one.
The idea is to have some nested parentheses to ‘generate’ all GET parameters, but it seems it won’t work as easily as I thought.
Here is what I’ve made so far :
RewriteRule
^(?:([\w-]+)\/)*([\w-]+)\.html$
index.php?a=$1&b=$2&c=$3&d=$4&e=$5&f=$6&g=$7&h=$8&i=$9 [L]
GET result for the url http://website.com/1/2/3/4/5/6/7/8/9.html :
array(9) {
["a"]=> string(1) "8"
["b"]=> string(1) "9"
["c"]=> string(0) ""
["d"]=> string(0) ""
["e"]=> string(0) ""
["f"]=> string(0) ""
["g"]=> string(0) ""
["h"]=> string(0) ""
["i"]=> string(0) ""
}
Instead of get a=1, b=2, c=3… I only receive the two last parameters. Notice that the RewriteRule is executed, then I know my regex match.
Any idea ?
Untested, but I think this does what you want. Note that it works for 1 to 9 parameters, it requires at least one.
Also note that any GET parameter that was present in the original url could be removed this way.