在官方 NGINX 文档中,他们对生产级 Symfony 有以下配置:
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# When you are using symlinks to link the document root to the
# current version of your application, you should pass the real
# application path instead of the path to the symlink to PHP
# FPM.
# Otherwise, PHP's OPcache may not properly detect changes to
# your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
# for more information).
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Prevents URIs that include the front controller. This will 404:
# http://domain.tld/app.php/some-path
# Remove the internal directive to allow URIs like this
internal;
}
完整的配置文件可以在这里找到这里
实际重定向到哪里internal
?评论说它从 URI 中删除了前端控制器,但我并不完全清楚它是如何做到的。
答案1
它不会重定向任何内容。它指定如何外部重定向http://example.com/app.php/some-path
即应该处理像的位置;设置后,它们应该返回404
,只允许内部重定向. 处理为内部重定向的条件在以下文档中列出:internal
指示:
指定给定位置仅可用于内部请求。对于外部请求,将返回客户端错误 404(未找到)。内部请求如下:
- 由
error_page
、index
、random_index
和try_files
指令重定向的请求;X-Accel-Redirect
通过上游服务器的响应头字段重定向的请求;include virtual
由命令形成的子请求ngx_http_ssi_模块模块和 ngx_http_addition_module模块指令;- 指令改变的请求
rewrite
。