Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

This is a complicated one which I hope has a simple answer...

RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&filters=$3&_p=$4&name=$1

This rule would pick up category/kitchen/10/0-0-0-0-0-0-0-0/1

with the following get vals:


The reason filters were stored in 0-0-0-0-0-0-0-0 was because of the 9 back references limit. Each 0 was a different filter variable which I accessed by doing a split on $_GET['filter'].

I am now changing my URL to a non mod rewritten one, so that the rewrite rule becomes:

RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&filters=$3&_p=$4&name=$1 [R=301,L]

Note to [R=301,L] so it becomes a 301 redirect.

This is all fine but I was wondering if there a was a clever way of splitting the 0-0-0-0-0-0-0-0 so that each 0 is a get variable. So I can get


Any idea?

Thanks in advance!

share|improve this question
Minor nit: it's actually 10 back-references: $N where 0 <= N <=9. – earl Sep 7 '09 at 16:21
Apologies: # RewriteRule backreferences: These are backreferences of the form $N (0 <= N <= 9), which provide access to the grouped parts (in parentheses) of the pattern, from the RewriteRule which is subject to the current set of RewriteCond conditions.. # RewriteCond backreferences: These are backreferences of the form %N (1 <= N <= 9), which provide access to the grouped parts (again, in parentheses) of the pattern, from the last matched RewriteCond in the current set of conditions. – icelizard Sep 7 '09 at 16:29
To future viewers: This whole thing is just a pile of bad ideas. There are better ways to write web apps and the "problems" encountered here emphasize why this shouldn't be done. – Chris S Sep 22 '12 at 0:30
up vote 1 down vote accepted

You could double the number of possible back-references by splitting the regex between a RewriteCond and a RewriteRule. Based on your examples, this would look something like the following:

RewriteCond %{PATH_INFO} ^category/[^.]+/[0-9]+/([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)/[0-9]+
RewriteRule ^category/([^.]+)/([0-9]+)/[^.]+/([0-9]+) category.php?c_id=$2&f1=%1&f2=%2&f3=%3&f4=%4&f5=%5&f6=%6&f7=%7&f8=%8&_p=$3&name=$1 [R=301,L]

Yes, I know, it's not the most elegant solution, but it should work. You may need to play a bit with the PATH_INFO (e.g. switching to REQUEST_URI or something similar) depending on your exact settings.

share|improve this answer
Thanks i took your idea and changed a littel: RewriteCond $3 ^([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+‌​)$ RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&f1=%1&f2=%2&f3=%3&f4=%4&f5=%5&f6=%6&f7=%7&f8=%8&f9=%9&_p=$4‌​&name=$1 [R=301,L] – icelizard Sep 8 '09 at 8:39

maybe you could use flags like 'next|N' (next round) after a RewriteRule to rerun the process with an useable break condition to avoid infinite loops

see here:

i haven't tried this yet but it may be possible

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.