Apache .htaccess: How to remove question mark from

2019-02-15 13:29发布

问题:

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]

回答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=.*


回答2:

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.



回答3:

If you need http://site.com/page/?YOURSTRING=blabla

redirected to http://site.com/page/

then see this link - https://stackoverflow.com/a/15680832/2215124