我是 nginx 新手,正在边学边用。我正在尝试一个博客网站,配置如下。当我访问我的网站时http://example.org/markdown-example.md,它会在页面上加载 md 文件的内容,而不是将其传递给 md.php。
有人能告诉我我可能做错了什么吗?谢谢!
file: /etc/nginx/sites-available/blog
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ \.md$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SCRIPT_NAME $uri;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/blog/md.php;
include fastcgi_params;
}
location ~ ^(.*)\.md/raw$ {
try_files $1.md =404;
}
我还添加 .md 作为允许的文件扩展名之一:
file: /etc/php5/fpm/pool.d/www.conf
security.limit_extensions = .md .php .php3 .php4 .php5
另外当我去http://example.org/markdown-example.md/raw,由于某种原因,.md 文件被下载。
答案1
做你想做的事情的更合适的方法是让你location ~ \.md$
像这样阻止:
location ~ \.md$ {
rewrite ^ /blog/md.php last;
}
在这里我假设你的root
指令被指定为/usr/share/nginx/
,这样就会rewrite
解析为/usr/share/nginx/blog/md.php
因此,此重写会将请求重定向到以.md
md.php 结尾的任何路径。重写后,nginx 将执行另一轮匹配,并找到该location ~ \.php$
块,然后使用它来将脚本执行传递给 PHP 引擎。