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

Your RewriteRule as written appears to be trying to do opposite of what your question headline is saying. You say that you want htaccess rewrite /book.php?id=1234 to /book/1234, but your RewriteRule:

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

Is adding a query string parameter.

The RewriteRule below will rewrite rewrite /book.php?id=1234 to /book/1234

RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^book\.php$ /book/%1? [L]

Also, if you really wish to go the other way, i.e. rewrite /book/1234 to /book.php?id=1234 the following should do that:

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

Leave a Comment