Я хочу настроить сервер nginx, чтобы я мог использовать app.php
или app_dev.php
в моих ссылках. Прямо сейчас без них, просто:
www.foobar.com/controller/method/param1/param2
Он загружает app.php по умолчанию. То же самое происходит, когда я добавляю app.php в качестве префикса, но когда я добавляю app_dev.php следующим образом:
www.foobar.com/app_dev.php/controller/method/param1/param2
Я получаю сообщение об ошибке, что маршрут не найден. Поэтому он рассматривает app_dev.php как контроллер. Почему это так? Как я могу его изменить?
Файл конфигурации:
location /foobar/ {
index app_dev.php app.php
if (!-e $request_filename)
{
rewrite ^/(.*)$ /foobar/(app|app_dev).php?$1 last;
}
try_files $uri $uri/ app.php app_dev.php;
}
просто используйте эту конфигурацию ниже. это работа как с app_dev.php, так и без нее.
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
# DEV
# This rule should only be placed on your development environment
# In production, don't include this and don't deploy app_dev.php or config.php
location ~ ^/(app_dev|config)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
# 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;
}
В зависимости от вашей конфигурации PHP-FPM, fastcgi_pass также может быть fastcgi_pass 127.0.0.1:9000.