2016-11-07 18 views
0

に行く私のようなURLのリストがあります:nginxの - パターン404場合 -

domain.com/some-url-key-with-possible-id-after-it-99999.html 

を私はそのURLをしようとする必要があり、それは404を返した場合、リダイレクト先:

domain.com/some-url-key-with-possible-id-after-it.html 

は、ということです可能?

location ~ /([a-zA-Z0-9\-]+)-([0-9]+).html$ { 
## IF ABOVE IS 404 
    return  301 http://domain.com/$1.html; 
## ENDIF 
} 

私はこのようなものが見つかりました:

server { 
     listen    12440; 
     root  /some/path/here/nginx/html/noahc/; 
     server_name www.domain.net, domain.net; 
     port_in_redirect off; 

     location /{ 
      error_page 404 = @foobar; 
     } 

     location @foobar { 
      rewrite .*/permanent; 
     }  
} 

をしかし、私は要求パターンから変数をURLにリダイレクトする必要があるので、それは、私を満たしていません。引数として([a-zA-Z0-9 - ] +) - ([0-9] +)を渡すことができればOKです。

+0

なぜあなたはurlの変数を使いたいですか?あなたは変数を要求していますか? – Blueblazer172

+0

結果:([a-zA-Z0-9 - ] +) - ([0-9] +) – dudzio

+0

これはパターンですが、どうしたいですか? – Blueblazer172

答えて

0

あなたはURIを持っており、静的ファイルが存在しない場合はそのURIを書き換えたいと思っています。ファイルの存在をテストするにはtry_filesを使用してください。

root /path/to/docroot; 

location ~ ^(/[a-zA-Z0-9-]+)-[0-9]+\.html$ { 
    try_files $uri @rewrite; 
} 

location @rewrite { 
    return 301 $1.html; 
} 

あなたはリライトになりたいか見えに応じて、名前の場所にreturn 301またはrewrite ... lastを使用することができます。

nginxディレクティブのヘルプについては、this documentを参照してください。

+0

それは簡単ですか?私に確認させてください! :) – dudzio

+0

意図したとおりに動作しません - リクエストが404の場合だけでなく、毎回リダイレクトされます。 – dudzio

+0

'try_files $ uri'はファイルを見つけることができません。 'root'を正しく設定してログファイルを見ましたか? –

関連する問題