Hi there.
If you havent solved your problem, i've also been through this.
Firstly, I found that mod rewrite happily accepted 9 variables, but no more.
To solve this, we have to understand how RewriteRules work:
Each (.*) represents one of those $ variables. So, if you know for sure what the variable names are going to be (e.g. $category, $subcategory etc.), you could take them out of the list of $1, $2 variables like this:
Rather than : RewriteRule index/(.*)/(.*)/(.*)/(.*)/$ /shop/index.php?$1=$2&$3=$4
Put this : RewriteRule index/category/(.*)/subcategory(.*)/$ /shop/index.php?category=$1&subcategory=$2
You can see that in action here :
http://www.tm4b.com/useful_links/development_groups.php
My mod RewriteRule looks like this:RewriteRule useful_links/(.*).php$ /useful_links.php?class=$1
Although it originally looked like this: useful_links/(.*)-(.*).php$ /useful_links.php?$1=$2
This should half the number of $ in the RewriteRule.
Secondly, if RewriteRules share the same variables, they'll conflict with each other. So if you are calling the second of your described RewriteRules, it will think you are calling the first (for example).
The solution to that is to have only 1 RewriteRule and declare all the possible variable names in it, even if you leave the actual variables blank.
For example, if a user is looking a category page, the url should still declare the sub-category variable and the product variable, and just leave them blank.
So rather than : /shop/index.php?category=1
The url should read : /shop/index.php?category=1&subcategory=&product=
Hope it all makes sense.