1

次の問題については、nginx の書き換えルールが必要です。

複数のハイフンと最終的にアンダースコアを含む URL があります

リクエスト例: http://www.example.com/cat/cat2/200-AB---a-12_12-123.312/cat-_-cat/cat/dog---I

404エラーが発生するため、301-リダイレクトが必要です:

http://www.example.com/cat/cat2/200-AB-a-12-12-123.312/cat-cat/cat/dog-I

したがって、アンダースコアはすべてハイフンに置き換え、ハイフンは一度に 1 つだけにする必要があります。

短いバージョン: --- を - に置き換え、_ を - に置き換えますが、_ を - に置き換えると、この --- は --- になり、ルール 1 を再度呼び出す必要があります。

1つのルールでそれを行うことは可能ですか? 他の方法でそれを行う方法がない場合:) nginxでそれを行う方法がまったくわかりません

どんな助けでも大歓迎です:)

4

1 に答える 1

1
% nginx -c $PWD/test.conf
% curl -I localhost:8080/cat/cat2/200-AB---a-12_12-123.312/cat-_-cat/cat/dog---I
HTTP/1.1 301 Moved Permanently
Server: nginx/1.3.13
Date: Wed, 20 Feb 2013 00:09:50 GMT
Content-Type: text/html
Content-Length: 185
Location: http://localhost:8080/cat/cat2/200-AB-a-1212-123.312/cat-cat/cat/dog-I
Connection: keep-alive

% cat test.conf
events { }

#error_log  logs/error.log debug;

http {
    server {
        listen 8080;
        location /cat/cat2/ {
            # replace up to 3 inconsecutive
            # uderscores per internal redirect
            rewrite "^(.+?)_+(?:(.+?)_+)?(?:(.+?)_+)?(.+)$" $1$2$3$4 last;

            # replace up to 3 inconsecutive multiple
            # hyphens per internal redirect
            rewrite "^(.+?-)-+(?:(.+?-)-+)?(?:(.+?-)-+)?(.+)$" $1$2$3$4 last;

            return 301 $uri;
        }
    }
}
于 2013-02-20T00:01:56.530 に答える