我想用 nginx 设置 symfony,这个配置运行正常
server {
listen 80;
root /src/web;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 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;
}
error_log /var/log/nginx/symfony_error.log;
access_log /var/log/nginx/symfony_access.log;
}
但是我还希望在我的服务器上也能够通过 app_dev.php 和 app_test.php 访问文件
到目前为止,上述配置 http://127.0.0.1/api/check
运行良好
但我也想要
http://127.0.0.1/app_dev.php/api/check
并且http://127.0.0.1/app_test.php/api/check
可以正常工作。
目前它给了我 404 错误
更新
server {
listen 80;
root /src/web;
client_max_body_size 30m;
client_body_buffer_size 128k;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ \.php {
root /src/web/;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
try_files $uri =404;
}
}
答案1
由于某种原因,您的配置被设置为转发到 PHP仅有的请求到 app.php。
location ~ ^/app\.php(/|$) {
因为您想要所有 PHP 文件,所以您应该允许处理所有 PHP 文件。
location ~ \.php {
当然,你还需要internal;
按照注释的指示删除。这应该用 替换try_files $uri =404;
。这是一个安全措施。