2016-05-04 5 views
3

Nginx + PHP-FPMに移行しようとしています。Apache + mod_phpです。現在mod_rewriteを使用して、.phpで終わる仮想URIを実際のPHPスクリプトに書き直しています。 mod_phpを使用すると、これは完全に機能します。しかしNginx + FPMで、proxy_passを使用する必要があるので、これは機能しません。 の拡張子に一致する正規表現のロケーションブロックを追加すると、最も高い優先順位が得られ、書き換えルールは適用されません。nginxの.php拡張子にrewriteとphp-fpmの両方を使用してください

どうすれば解決できますか?

location /test/ { 
    rewrite "^/test/([a-z]+).php$" test.php?q=$1 last; 
} 

location ~ [^/]\.php(/|$) { 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 

    set $fastcgi_script_name_custom $fastcgi_script_name; 
    if (!-f $document_root$fastcgi_script_name) { 
     set $fastcgi_script_name_custom "/cms/index.php"; 
    } 

    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    include fastcgi_params; 
} 

答えて

1

あなたはserverブロックのコンテキスト内であなたのlocationブロックの上rewriteルールを配置することができます。または、rewriteルールをURIに一致するブロックlocation内に配置することもできます。

だから、このいずれかを使用することができます。

rewrite "^/test/([a-z]+).php$" /test.php?q=$1 last; 

location/{ ... } 

location ~ [^/]\.php(/|$) { ... } 

またはこの:書き換えURIは(Apacheの大会とは違って)大手/を必要としていることを

location/{ ... } 

location ~ [^/]\.php(/|$) { 
    rewrite "^/test/([a-z]+).php$" /test.php?q=$1 break; 
    ... 
} 

お知らせ。

詳細はthis documentを参照してください。

関連する問題