2016-03-19 6 views
1

URL書き換えについてはっきりとわかっているドキュメントはありません(私はそれを理解できません。ドキュメントが実際に非ネイティブで読みにくいと思います)。場所によって異なるURL書き換え

私はそれはそれのすべて path/ajax/index.php に向けて /ajax/リダイレクトで始まるならば、他の 404 not found

path/media/に向かって/*\.(js|png|jpg|css|ttf|xml)$/に一致するすべてのルートを書き換え、存在する場合はそれを返し、ファイルのexistanceをしようとする方法を探しています

そうでない場合は、すべてをリダイレクトpath/www/index.php

私はそれをどうすればいいのか分かりません。私は3つの場所/ media /、/ ajax /および/ www /を作成しましたが、正しい方法を使用してリライトしたり、返さないようにしたり、場所を正しい方法で行うことができます。

fastcgiに関して私がsites-enabled/fileに書いたことは本当に理解できません。これは解釈パスですか?

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 

私が正しく理解したら、「それが.phpで終わり、それが階層に存在し、それを実行する」という意味です。

そして、私はphp(/ www /と/ ajax /)を扱わなければならない場所ごとに、この種のものを置くべきかどうかは分かりません。特に、両方のルーティングをするつもりです。さらに、そうしなければならないかどうかはわかりません。

答えて

1

最も単純なPHPの設定は、場所のブロックによって継承される共通rootディレクティブを使用して、あなたのケースで次のようになります。

root path; 

これは/www/index.php/ajax/index.phpが両方location ~ \.php$ブロックによって処理されることを意味します。

デフォルトのアクションはlocation /ブロック内try_filesディレクティブで定義することができます

location/{ 
    try_files $uri $uri/ /www/index.php; 
} 

あなたは/ajaxで始まるURIの異なるデフォルトのアクションが必要な場合は、より具体的な場所を追加:

location /ajax { 
    try_files $uri $uri/ /ajax/index.php; 
} 

メディアURIが/mediaで始まらないようにする場合は、特定の場所(

)の rootを上書きできます。
location ~* \.(js|png|jpg|css|ttf|xml)$ { 
    root path/media; 
} 

具体的には、fastcgi_split_path_infofastcgi_indexの指示は不要です。 include fastcgi_params;の文が誤って上書きされ、後者を避けるために、任意のfastcgi_paramディレクティブの前に配置する必要があります。

location ~ \.php$ { 
    try_files $uri =404; 
    include fastcgi_params; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

は詳細についてはnginx documentationを参照してください。

関連する問題