Home > Back-end >  I am having issues adding multiple url parameters to the same line in .htaccess
I am having issues adding multiple url parameters to the same line in .htaccess

Time:01-21

Currently my .htaccess looks like this


RewriteCond %{QUERY_STRING} ^&
RewriteRule ^$ - [R=404]

RewriteCond %{QUERY_STRING} ^age
RewriteRule ^$ - [R=404]

RewriteCond %{QUERY_STRING} ^gender
RewriteRule ^$ - [R=404]

RewriteCond %{QUERY_STRING} ^languages
RewriteRule ^$ - [R=404]

RewriteCond %{QUERY_STRING} ^sites
RewriteRule ^$ - [R=404]

RewriteCond %{QUERY_STRING} ^sortOrder
RewriteRule ^$ - [R=404]

RewriteCond %{QUERY_STRING} ^status
RewriteRule ^$ - [R=404]

RewriteCond %{QUERY_STRING} ^tags
RewriteRule ^$ - [R=404]

At the moment this works well, if I visit a URL with one of the parameters it will give me a 404 page, I want to know if there is a better way to write this.

Is it possible to combine all these into one line?

I have tried writing it like this

RewriteCond %{QUERY_STRING} ^&
RewriteCond %{QUERY_STRING} ^age
RewriteCond %{QUERY_STRING} ^gender
RewriteCond %{QUERY_STRING} ^languages
RewriteCond %{QUERY_STRING} ^sites
RewriteCond %{QUERY_STRING} ^sortOrder
RewriteCond %{QUERY_STRING} ^status
RewriteCond %{QUERY_STRING} ^tags
RewriteRule ^$ - [R=404]

But that didn't work as it would only work for the top query and not the rest of them

CodePudding user response:

I have tried writing it like this

RewriteCond %{QUERY_STRING} ^&
RewriteCond %{QUERY_STRING} ^age
RewriteCond %{QUERY_STRING} ^gender
RewriteCond %{QUERY_STRING} ^languages
RewriteCond %{QUERY_STRING} ^sites
RewriteCond %{QUERY_STRING} ^sortOrder
RewriteCond %{QUERY_STRING} ^status
RewriteCond %{QUERY_STRING} ^tags
RewriteRule ^$ - [R=404]

RewriteCond directives (conditions) are implicitly AND'd, so the above will never be successful (ie. no 404 occurs) since the query string can not match all those strings at the same time.

You need to use the OR flag on all but the last condition. For example:

RewriteCond %{QUERY_STRING} ^& [OR]
RewriteCond %{QUERY_STRING} ^age [OR]
RewriteCond %{QUERY_STRING} ^gender [OR]
RewriteCond %{QUERY_STRING} ^languages [OR]
RewriteCond %{QUERY_STRING} ^sites [OR]
RewriteCond %{QUERY_STRING} ^sortOrder [OR]
RewriteCond %{QUERY_STRING} ^status [OR]
RewriteCond %{QUERY_STRING} ^tags
RewriteRule ^$ - [R=404]

However, this can be further reduced using regex alternation. For example, the above is the same as the following using just one condition:

RewriteCond %{QUERY_STRING} ^(&|age|gender|languages|sites|sortOrder|status|tags)
RewriteRule ^$ - [R=404]
  • Related