2016-10-26 8 views
0

に書き換え一緒try_filesを使用する:は、私はすでにこの種のものを実行するのnginxで書き換えを広範囲に使用するnginxの場所ブロック

/photos/123344    -> /photos/photos.php?id=123344 
/photos/london-2016   -> /photos/photo-shoot.php?name=london-2016 

現在、私は、他の(非動的)ページにはルールがありません。例えば、私はそれぞれの.phpファイルに対して個別rewriteルールを指定せずに

/photos/shoot-register.php -> /photos/shoot-register 

でもなりたい

/photos/shoot-register.php -> /photos/shoot-register.php 

try_filesはここに正しい指示であると思われる:私は2つの書き換え行を削除しない限り、

location ~ ^/photos { 
    try_files $uri $uri.php?$args; 
    rewrite ^/photos/([0-9]+)(/?)$  /photos/photo.php?id=$1; 
    rewrite ^/photos/([^/\.]+)(/?)$  /photos/photo-shoot.php?name=$1; 
} 

しかし、これは動作しません。

私はそれが試行ファイルの後に実行が停止しないことを意味すると思いますか?それは "shoot-register.php"を見つけたが、実行を続け、/photos/photo-shoot.php?name=shoot-register.phpで終わる?

try_filesが一致するものを見つけるのに成功した後、どうやって止めることができますか?

おかげ

答えて

1

何という名前の場所を分離し、ファイル、そしてPHPファイルを試して、あなたのtry_fileディレクティブを変更するには書き換えを移動し、新しい場所に向かう場合はどうなりますか?

location ~ ^/photos { 
    try_files $uri $uri.php?$args @rewrites; 
} 

location @rewrites { 
    rewrite ^/photos/([0-9]+)(/?)$  /photos/photo.php?id=$1; 
    rewrite ^/photos/([^/\.]+)(/?)$  /photos/photo-shoot.php?name=$1; 
} 
+0

確かに実行可能な解決策は、ベストプラクティスであり、訓練されていない目に比べて不必要に見えますか? – Codemonkey

+0

それは私が考えることができる唯一のものです。問題は、try_filesディレクティブが、オプションの1つが有効なときに停止して戻りませんということです。あなたのバージョンでは、それは.phpの部分で停止し、次にlocationディレクティブを続けます。私のバージョンでは、同じことをしますが、リライトディレクティブは存在しないので、期待している内容を返します。 – miah

関連する問題