Okay, I misunderstood your "specification" so I need a reset.
First, my apology for using the "chain" term which is defined as
I had used it intentionally but without realizing that you COULD have the intermediate URI as a request. That was a silly mistake on my part because, of course, the intermediate URI can't be served!
Then, I thought you'd wanted the intermediate URI displayed. Didn't you want that as the "pretty URI?"
Finally, you're hardcoding the link in the mod_rewrite and not establishing a pattern to capture and redirect to the intermediate URI and thence to the PHP script.
I'm just not sure why you'd want to capture the path and ASP script name (without the extension) and redirect that to ... navigation/map (the $ is an error).
RewriteRule ^(([^/]+/)*[^.]+)\\.asp$ /navigation/map<font color='"#FF0000"'>$</font> [<font color='"#FF0000"'>C,</font>R=301]
RewriteRule ^nav/nzmap.php /navigation/map$[L]
IMHO, this should be (if my "specification' were correct):
# redirect to "pretty URI"
RewriteRule ^(([^/]+/)*[^.]+)\\.asp$ $1 [R=301]
# the .asp has been removed and the new URI displayed
# redirect to PHP version of the script
RewriteRule ^(([^/]+/)*[^.]+)$ $1.php [L]
In other words, if you have the power of regular expressions, use it!
Of course, if my interpretation of your "specification" is incorrect, then you'll have to rewrite it precisely for better help. One word of warning, though, is that carrying through the same path and filename (sans extension) is HIGHLY advisable as, to do otherwise, would require massive amounts of code and/or a RewriteMap (which is not available to you unless you own the Apache daemon).