2

How to make .htaccess to remove question mark from URL if not ?id=(.*)?

# Rewrite for ?id=(.*)
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule .*$ %{REQUEST_URI}%1? [R=301,L]

# It does not work out on this way
RewriteCond %{QUERY_STRING} !=""
RewriteCond %{QUERY_STRING} !^id=.*
RewriteRule .*$ %{REQUEST_URI}%1? [R=301,L]
Binyamin
  • 7,493
  • 10
  • 60
  • 82

2 Answers2

1

This would be the right rule:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^?#\ ]*)\?[^\ ]*\ HTTP/ [NC]
RewriteCond !{QUERY_STRING} id
RewriteRule .*$ %{REQUEST_URI}? [R=301,L]

Update:

# Query rewrite exceptions
RewriteCond %{QUERY_STRING} !callback=.*
Binyamin
  • 7,493
  • 10
  • 60
  • 82
0

Does this work?

RewriteCond %{QUERY_STRING} ^.+$
RewriteCond %{QUERY_STRING} !^id=
RewriteRule ^(.*)$ $1?%1 [R=301,L]

Tip: during your testings, use 302 redirections instead of 301, as 301 redirections are stored by browsers. You can finally switch to classic 301 when you are done testing.

Mathieu Rodic
  • 6,637
  • 2
  • 43
  • 49