“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”
Since your rule rewrites everything it will get in a loop.
First it will rewrite foo to html/pages/foo, then it will rewrite html/pages/foo to html/pages/html/pages/foo, etc etc, until Apache is fed up and stops.
What you want is add something to prevent the redirect when the path already starts with html/pages.
Something like
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/html/pages
RewriteRule ^(.*)$ html/pages/$1 [L]
Because then it changes html/pages/contact.php to html/pages/contact.php, which isn’t actually a change. And since no change happens, the rewrites won’t be applied a second time.
Basically Apache keeps applying the RewriteRules until
The result is the same as what went in; or
It’s done 10 rounds of rewrites and things still keep changing