web-dev-qa-db-ja.com

Nginxの書き換え規則

WordPress用のNginx書き換えアルゴリズムに問題があります。

私はこれを書き換えに使っていますが、うまくいきます。

    server_name www.domain.com domain.com;
    if ($Host != 'domain.com') {
    rewrite ^/(.*)     http://domain.com/$1 permanent;
    } 

それはこのURLを作ります。

http://domain.com/?author=1 

これに。

http://domain.com/author/username/

これはいいのですが、このようなURLです。

http://domain.com/?author=1&type=like

それはそれを作ります。

http://domain.com/author/username/?type=like

と私はエラーを取得していませんが、クエリが機能していません。

何が足りないの?

1
boranb

WordPressの正しいNginx書き換え規則は次のとおりです。

location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

これはindex.phpを通してすべてを送り、追加された問い合わせ文字列をそのまま保ちます。

PHP-FPMを実行している場合は、セキュリティ対策としてfastcgi_paramsの前にこれを追加する必要があります。

location ~ \.php {
        try_files $uri =404;

      //  fastcgi_param ....
      //  fastcgi_param ....

      fastcgi_pass 127.0.0.1:9000;
}
4
Chris_O

$ uri '&'$の間の文字に注意してください。 argsは、それがなくても部分的には機能するので非常に重要ですが、場合によっては失敗します。

正しい:

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

間違っています:

location / {
    try_files $uri $uri/ /index.php?q=$uri$args;
}

間違った方法では、複数の引数を処理できます。

https://example.com?myvar=xxx&secvar=xxx // Will work

引数が1つだけ渡されると失敗します。

https://example.com?myvar=xxx // Will NOT work

これは私のためのタイプミスを見つけることを本当に難しくしました、しかし少なくとも私は何か新しいことを学びました^^

1
Steffan