私がやろうとしている
http://site.com/index.php?route=product/search&filter_name=QUERY
に
http://site.com/search?=QUERY
これが私のルールです。それは動作しません。
rewrite ^/search?q=(.*)?$ /index.php?route=product/search&filter_name=$1 last;
私がやろうとしている
http://site.com/index.php?route=product/search&filter_name=QUERY
に
http://site.com/search?=QUERY
これが私のルールです。それは動作しません。
rewrite ^/search?q=(.*)?$ /index.php?route=product/search&filter_name=$1 last;
Nginxでは、クエリ文字列との照合はできません。代わりに、$args変数とif -sがあります。これを組み合わせて、例を次のように機能させることができます。
(nginx if elseステートメントで更新)
location /search {
if ($args ~ "q=(?<q>.*)?") {
rewrite ^ /index.php?route=product/search&filter_name=$q last;
}
# Else (if no search query entered from form)
rewrite ^ /index.php?route=product/search last;
}
ただし、 nginx構成で-sが悪と見なされる場合は、(あなたの場合は)try_filesを使用する必要があります。
location /search
try_files $uri /index.php?route=product/search&filter_name=$arg_q;
}
問題は$
兆候です。このような状況では事前に行う必要があります。解決:
rewrite ^/search?q=$(.*)$ /search.php?q=$1? last;