Home > Blockchain >  I want to remove a string with a question mark at the end of my URL with .htaccess
I want to remove a string with a question mark at the end of my URL with .htaccess

Time:12-04

I want to remove the string

?mobile=1

out from different URLs with .htaccess. So:

https://www.example.com/?mobile=1 should become https://www.example.com/

and

https://www.example.com/something/?mobile=1 should become https://www.example.com/something/

I tried the following

RewriteEngine On
RewriteRule ^(. )?mobile=1 /$1 [R=301,L,NC]

But that does not seem to work. Any ideas?

CodePudding user response:

RewriteRule ^(. )?mobile=1 /$1 [R=301,L,NC]

The RewriteRule pattern matches against the URL-path only, which notably excludes the query string. So the above would never match. (Unless there was a %-encoded ? in the URL-path, eg. ?)

To match the query string you need an additional condition (RewriteCond directive) and match against the QUERY_STRING server variable.

The regex . (1 or more) will not match the document root (ie. your first example: https://www.example.com/?mobile=1). You need to allow for an empty URL-path in this case. eg. .* (0 or more).

For example, try the following near the top of your root .htaccess file:

RewriteCond %{QUERY_STRING} =mobile=1
RewriteRule (.*) /$1 [QSD,R=301,L]

This matches the query string mobile=1 exactly, case-sensitive (as in your examples). No other URL parameters can exist. The = prefix on the CondPattern makes this an exact match string comparison, rather than a regex as it normally would.

And redirects to the same URL-path, represented by the $1 backreference in the substitution string that contains the URL-path from the captured group in the RewriteRule pattern.

The QSD (Query String Discard) flag removes the query string from the redirect response.

Test first with a 302 (temporary) redirect and and only change to a 301 (permanent) - if that is the intention - once you have confirmed this works as intended. 301s are cached persistently by the browser so can make testing problematic.

CodePudding user response:

MrWhite is awesome, the following code worked perfectly:

RewriteCond %{QUERY_STRING} =mobile=1
RewriteRule (.*) /$1 [QSD,R=301,L]
  • Related