I am using 2 RewriteRule rules during my htaccess

RewriteEngine on
RewriteBase /
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#if it has member/photo/render_fast forward to photo_render.php
RewriteRule ^member/photo/render_fast(.*) /photo_render.php?r=$1 [L]
# otherwise forward it to index.php
RewriteRule . index.php [L]

However this does not work, when I am trying during my local machine, my Apache always employ the 2nd rule, as well as in my hosting server Apache always display a mistake.

What shall we be held doing wrong ?

What is happening may be the second time around (following the URI continues to be rewritten to /photo_render.php) the second rule has been applied, thus /photo_render.php gets rewritten to index.php. You have to give a couple of conditions whenever you attempt to match something similar to . or .*. This will work:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^member/photo/render_fast(.*) /photo_render.php?r=$1 [L]
# otherwise forward it to index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

Observe that this can also fail if for whatever reason you do not have photo_render.php.