htaccess rewrite /book.php?id=1234 to /book/1234
===

This is what I have so far in my development environment:

    php_value error_log log/php.log
    php_value display_errors 1
    php_value magic_quotes_gpc Off
    
    RewriteEngine On
    
    # remove slash
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # file.php to /file
    RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
    RewriteCond %{REQUEST_URI} !^/ajax.php
    RewriteRule ^(.+)\.php$ http://localhost/$1 [R=301,L]
    
    # /file to file.php
    RewriteRule ^([^/.]+)$ $1.php [L]


I've tried a lot of variants of this rule but I always get a 500 error:

    RewriteRule ^(.*)$ /book.php?url=$1 [L]

And this is in my Apache's error.log:

    [Fri Jul 27 19:56:51 2012] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

What am I missing, why the redirect loop?