Назад | Перейти на главную страницу

Как воспроизвести функциональность .htaccess в NGINX

У меня есть ниже .htaccess файл в apache, который перенаправляет все запросы на app/index.php с или без GET параметр. Я только что установил NGINX, но мое приложение не запускается. Может ли кто-нибудь помочь в воспроизведении тех же функций в NGINX? Спасибо.

RewriteEngine on    

Options -Indexes

RewriteRule    ^$ app/ [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ app/index.php?url=$1 [QSA,L]

Использовать модуль перезаписи. Что-то вроде этого должно сработать:

location / {
  autoindex off;

  rewrite ^/$ app/ last;
  if (!-e $request_filename) {
    rewrite ^/(.*)$ app/index.php?url=$1;
  }
}

Использовать пробные файлы

Для большей части этой конфигурации нет необходимости использовать модуль перезаписи.

Правила перезаписи apache означают:

  • RewriteRule ^$ app/ [L] - отправьте URL / в каталог приложения
  • RewriteCond %{REQUEST_FILENAME} !-d - если запрос не в директории
  • RewriteCond %{REQUEST_FILENAME} !-f - если запрос не файл
  • RewriteCond %{REQUEST_FILENAME} !-l - если запрос не является символической ссылкой
  • Затем отправьте запрос на app/index.php?url=$1

В nginx эквивалент:

# No automatic directory listings
autoindex off;

# Send the root url to the app dir
index index.php;
rewrite ^/$ app/ last;

# check if the url matches a file, directory and if not send to app/index.php
try_files $uri $uri/ app/index.php?url=$uri;

Проверка символической ссылки является излишней, поскольку символическая ссылка также является файлом или каталогом.