Redirect ALL get parameters to another domain in Nginx - redirect

Only answers I can find for this have specific parameters and don't work if the parameters change.
I have a URL coming in such as:
/logs.php?user_id=10032&account_id=10099&message=0&interval=1&online=1&rsid=65374826&action=update&ids=827,9210,82930&session_id=1211546313-1602275138
I need to redirect this url to a completely different domain and file but keep the get params.
So it ends up redirecting to:
https://example.com/the_logger.php?REPEAT_ALL_GET_PARAMETERS_HERE
Here is what I have unsuccessfully tried so far:
location logs.php
{
rewrite https://example.com/the_logger.php?$args last;
}
But it doesn't seem to match the url or redirect. I think I'm misunderstanding the logic of nginx confs. If it were .htaccess I think I'd be okay. I can put a few more examples here if need be of what I'm trying to achieve.

As you state this is a redirect and not reverse proxying a request, I would use the return directive to tell the client to do a 301 or 302. Using the return directive is the simpler and more recommend approach to redirecting a client.
Something like should do what you want:
location /logs {
return 302 https://example.com/the_logger.php$is_args$args;
}
Where $is_args would output a ? if and only if the query string is not empty, and $args is the query string itself

Related

haproxy rewrite on backend to add a path for some requests to a specific domain

I am looking to try and get haproxy to rewrite a url on the backend. For example if the end user navigates to bitechomp.domain.com they should only see this URL but the request to the backend server needs to have the request re-written to include a path. e.g. bitechomp.domain.com/bitechomp
I believe I have the regex to match it, but struggling to find the syntax to then just have it add the folder path at the end.
^([a-zA-Z0-9]/)?(bitechomp).$
I believe I have resolved this.
http-request set-path /bitechomp/ if { path_reg ^([a-zA-Z0-9]/)?(bitechomp).$ }
This works for any domain so both bitechomp.domain1.com and bitechomp.domain2.com would be re-written to bitechomp.domain1.com/bitechomp and bitechomp.domain2.com/bitechomp

Nginx redirect string variable with wild card wordpress

I have a bunch of this strange 404 error's in google search console and the URL's doesn't exists in my site and I need to redirect them to my homepage.
http://www.example.com/plugins/feedback.php?href=http%3A%2F%2Fwww.example.com%2Fremain-url-1%2F&_fb_noscript=1
http://www.example.com/plugins/feedback.php?href=http%3A%2F%2Fwww.example.com%2Fremain-url-2%2F&_fb_noscript=1
http://www.example.com/plugins/feedback.php?href=http%3A%2F%2Fwww.example.com%2Fremain-url-3%2F&_fb_noscript=1
I've made this two attempts but it's not working
rewrite ^/plugins/feedback(/.*)$ http://www.example.com/ permanent;
rewrite ^/plugins/feedback.php?href=http://www.example.com(/.*)$ /blog/ permanent;
Is it possible to redirect this with one wild card?
The rewrite directive cannot be used to filter parameters because it uses a normalized URI which does not include the query string. You can access parameters using the $args variable, or individually using the $arg_xxx variables.
However, the $request_uri contains the entire URI (including query string) and could be used with an if block or map to test for the presence of the parameters you seek.
For example:
if ($request_uri ~ ^/some/regular/expression) {
return 301 /;
}
The block could be placed in the server block scope, or within the location block which would normally process the /plugins/feedback.php URI.
See the following documents for details: if directive, map directive, if usage restrictions.

nginx redirect based on domain and amend the url

i have several server names as in www.example.com example.com www.example.de example.de. If there is no arguments I would like to amend the language to the URL
for example
www.example.com ---> www.example.com?language=en
example.de ---> example.de?language=de
regrads
You can test for the absence of arguments by comparing $args with an empty string. For example:
if ($args = "") {
return 301 $scheme://$host$request_uri?language=en;
}
If you have your domains implemented within different server blocks, you can customise the return statement appropriately.
If you need to implement all of this within a single server block supporting multiple host names, you may need to use a map directive to calculate the value of the language parameter. See this document for more.
This is not a perfect solution, as the edge condition www.example.com? will result in www.example.com??language=en which does not look nice.

How to make a redirect to nginx, depending on the part of the URL?

Welcome essence of the problem.
We have a path
site.com/seveniry-dlya-turistov/...
(Where ... is the character code specific record (of goods), and in front of it, as you might guess - section of this article)
Those show on site.com website under "souvenirs for tourists" page of a souvenir.
I need to redirect this type:
If there is a request to .../eveniry-dlya-turistov/.. substitute the section title in the name of .../seveniry/..., see if there is a request for
site.com/seveniry-dlya-turistov/elemnet1/
we have to do a 301 redirect to
site.com/seveniry/elemnet1/
Please tell me how to do it, and why does not work like that ...
location /catalog {
rewrite ^/catalog/souvernirs-for-tourists/(.*)$ http://SITE-NAME/suveniry/$1 permanent;
}
Thanks in advance for your help!
Should be something like
rewrite ^/seveniry-dlya-turistov/(.*)$ /seveniry/$1 last;
But you need to test the exact regex since it's hard to do by head without testing. nginx will look for another location block matching /seveniry/$1 to serve content.

Nginx URL rewrite storing part of URI & Using it in redirect

Trying to make a nginx url rewrite for a branding only global site that
has search functionality (but no product catalog assigned as it's the global site) that will store part(or all if it's better) of the URL to pass it to a dedicated redirect script that geo redirects the user's query to the correct regional site.
Can someone tell me what is wrong with what I am doing?
rewrite ^/catalogsearch/result?q=(.*)$
/redirect-script?x=/catalogsearch/result=q=$1
permanent;
I don't think you can match the query string with the rewrite regexp.
Try this:
rewrite ^/catalogsearch/result$
/redirect-script?x=/catalogsearch/result=q=$arg_q
permanent;
$arg_q is one of the automatic variables containing the query arguments, see http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_