It’s probably due to the lack of a RewriteBase directive.
RewriteRule ^hello/(.*) /script.php?hello=$1 [QSA]Now, the RewriteBase directive tells Apache what “virtual directory” we are rewriting for so it can re-build the URL properly. You should note that I have removed the value of RewriteBase from the beginning of the regexp as a result.
I added the QSA flag, you might want to remove it.
With QSA: /hello/world/?version=2 becomes /script.php?hello=world/&version=2
Without QSA: /hello/world/?version=2 becomes /script.php?hello=world/
When a substitution occurs for a new URL, this module has to re-inject the URL into the server processing. To be able to do this it needs to know what the corresponding URL-prefix or URL-base is. By default this prefix is the corresponding filepath itself. But at most websites URLs are NOT directly related to physical filename paths, so this assumption will usually be wrong! There you have to use the RewriteBase directive to specify the correct URL-prefix.
Perl / MySQL / HTML CSS