Я пытаюсь настроить Symfony с существующего сайта на nginx. Моя локальная машина - это Apache, и это схема перенаправления на nginx. Как мне написать это с помощью RewriteRules?
location / {
# try to serve file directly, fallback to rewrite
try_files $uri @rewriteapp;
}
location @rewriteapp {
# rewrite all to app.php
rewrite ^(.*)$ /app.php/$1 last;
}
location ~ ^/(app|app_dev|config)\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass php_upstream; # Upstream on top of file
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
location / {
# try to serve file directly, fallback to rewrite
try_files $uri @rewriteapp;
}
location @rewriteapp {
# rewrite all to app.php
rewrite ^(.*)$ /app.php/$1 last;
}
Первая часть вроде бы единственная переделка. Похоже, это можно было бы записать следующим образом, используя mod_rewrite на Apache в корне .htaccess
файл:
# Enable trailing pathname information (if not already)
AcceptPathInfo On
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /app.php/$0 [L]
Переписать внутренне все запросы, которые не сопоставляются с физическими файлами или каталогами, /app.php/<requested-url-goes-here>
.
Поскольку при этом используется конечная информация о пути в URL (/$0
), вам необходимо убедиться, что сервер разрешает это, иначе вы сразу получите ошибку 404 Not Found. Однако обычно это включено по умолчанию (хотя это зависит от обработчика).