Make segment in the middle of a route optional
Your regex is going to become more complex and potentially less specific if you try to address both scenarios in a single route as the height and width parameters match numbers and the final segment of your URL matches any characters that would be found in a URL segment.

It may be easier to handle this as two rules, the more specific one first:

'/images/&lt;width:\d+&gt;/&lt;height:\d+&gt;/&lt;imageName:([-\w.]+)&gt;'
'/images/&lt;width:\d+&gt;/&lt;imageName:([-\w.]+)&gt;'


Making this two rules you get around needing to matching both a number OR other characters in the third segment. If the second and third segment are numbers and the fourth segment is present, your first rule will match. If the third segment is not a number and there is no fourth segment, your second rule will match.

Also, with two rules you can easily test if height exists or not in your controller or template. If you combine that third segment into a compound rule, you may need additional logic in your template to sort out what value you are working with.