I don’t really completely understand everything being done in your htaccess file, but it seems as though the “?” is being added in by the htaccess rewrite rule itself, even though it notes it is supposed to be removing index.php. The ? winds up right where index.php would be natively in the URL.
Here’s the section of my htaccess file that I use to remove index.php (see this thread for the full post on the topic):
# Redirect index.php Requests
# ------------------------------
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/NAME_OF_YOUR_SYSTEM_FOLDER_HERE/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
# Standard ExpressionEngine Rewrite
# ------------------------------
RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
Notice the last line of each grouping -
Yours:
RewriteRule ^(.*)$ /index.php?/$1 [L]
Mine:
RewriteRule ^(.*)$ /index.php/$1 [L]
My interpretation is that the ? is actually being inserted by your htaccess rewrite rule. If you remove it from that last line, you may be back in business. I’m not an htaccess expert - I’m just using what I’ve learned from Nick Benson and others in the community and noticing what’s different between what works for me and what you’re trying to use and you say isn’t behaving as expected.
Let me know if that helps.
Cheers.