PHPのNginxWebサーバーセットアップがあり、Nginxに移動したいので、これらの.htaccessルールをnginx.confファイルに変換したいと思います。
RewriteRule ^blog(|/)$ /data/core/site/blog.php
RewriteRule ^blog/post(|/)$ /data/core/site/blogpost.php
これまでのところ、これは私が持っているものです:
location /blog {
rewrite ^(.*)$ /data/core/blog.php last;
}
ただし、このページ( http://example.com/blog )にアクセスすると、ダウンロードするファイルが表示されます。サーバーにPHP andコンテンツを表示するには、どうすれば修正できますか?
完全なNginx構成:(WindowsでWinginxパッケージを使用):
server {
listen 127.0.0.1:80;
server_name localhost;
root home/localhost/public_html;
index index.php;
log_not_found off;
#access_log logs/localhost-access.log;
charset utf-8;
location ~ /\. { deny all; }
location = /favicon.ico { }
location = /robots.txt { }
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9054;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
location /blog {
rewrite ^(.*)$ /data/core/blog.php last;
}
}
これは私の質問に対する修正です。問題について多くの調査を行った後、それは非常に簡単であることがわかりました。
server {
listen 127.0.0.1:80;
server_name virjox www.virjox;
root home/virjox/public_html;
index index.php;
log_not_found off;
#access_log logs/virjox-access.log;
charset utf-8;
sendfile on;
location ~ /\. { deny all; }
location = /favicon.ico { }
location = /robots.txt { }
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9054;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
rewrite ^/(.*)\.html /$1\.php;
}
location /blog {
rewrite ^/blog(|/)$ /data/core/blog.php;
}
}
これは完全に機能します。
覚えておくべき基本的なルールは次のとおりです:nginxは1つの場所でリクエストを処理します(さらに強調することができます:および1つの場所のみ)。
読む: http://nginx.org/en/docs/http/request_processing.html
location
マッチング読む: location
ドキュメント
構成に基づいて、nginxは最初に/blog
prefixの場所で一致し、次に\.php$
regex場所であり、最終的には後者でリクエストを処理します。指定した構成では、スクリプトをrawファイルとしてダウンロードするのではなく、PHPに送信する必要があります。
ただし、これは構成が正しいことを意味するわけではありません。リクエストは/blog
の場所では処理されないため、現時点では役に立ちません。
fastcgi*
ディレクティブを/blog
の場所に直接配置してみませんか?次に、$fastcgi_script_name
変数(ここでは/blog
のバリアントとなるlocation
一致から推測)を使用する代わりに、fastcgi_param SCRIPT_FILENAME $document_root/data/core/blog.php
を使用できます。ちなみに、$fastcgi_script_filename
にはすでに開始/
が含まれているため、変数間に1つ追加する必要はありません。rewrite
は避けてください。単純なユーザーリダイレクト(HTTPステータスコードを使用してクライアントに送信されるリダイレクト通知を介して行われるURL書き換え)は、return
を使用して実行できます。ここで行ったのは、内部リダイレクト(サーバー上でローカルに実行)でした。その唯一の用途は、URIを変更してからSCRIPT_FILENAME
パラメーターに使用することでした。初心者に使用できます:
location /blog {
fastcgi_pass 127.0.0.1:9054;
fastcgi_param SCRIPT_FILENAME $document_root/data/core/blog.php;
include fastcgi_params;
# Useless here since SCRIPT_FILENAME will never be a directory indeed
fastcgi_index index.php;
location /blog/post {
fastcgi_pass 127.0.0.1:9054;
fastcgi_param SCRIPT_FILENAME $document_root/data/core/blogpost.php;
include fastcgi_params;
}
}