Рейтинг:2

Apache .htaccess для порта NGINX RewriteRules

флаг cn

Итак, я на самом деле пытаюсь портировать Переписать правила из Апачи к Nginx но, кажется, я не могу полностью портировать.

На самом деле, на моем сервере у меня есть работающий сайт. https://example.com домен и /var/www/html/ путь на сервере. То, что я пытаюсь сделать, это установить пользовательский скрипт в подкаталог под var/www/html/подкаталог путь и домен https://example.com/подкаталог.

Проблема в том, что правила перезаписи не работают и даже 404 не найдено происходят ошибки. Пожалуйста, помогите мне.

Мой Апач .htaccess файл:

Правило перезаписи ^page/?$ pages/page.php [L]
Правило перезаписи ^about/?$ pages/about.php [L]
RewriteRule ^privacy-policy/?$ pages/privacy-policy.php [L]
RewriteRule ^contact/?$ pages/contact.php [L]
Правило перезаписи ^terms/?$ pages/tos.php [L]

RewriteCond %{REQUEST_FILENAME} -f
Правило перезаписи ^(.+) - [PT,L]

RewriteRule ^sitemap-([0-9]+).xml$ parts/sitemaps/sitemap-$1.xml [QSA,L]

RewriteRule ^(.*)/(.*)/(.*)/(.*)/?$ index.php?bank=$1&state=$2&district=$3&branch=$4 [QSA,L]
RewriteRule ^(.*)/(.*)/(.*)/?$ index.php?bank=$1&state=$2&district=$3 [QSA,L]
RewriteRule ^(.*)/(.*)/?$ index.php?bank=$1&state=$2 [QSA,L]
RewriteRule ^(.*)/?$ index.php?bank=$1 [QSA,L]

и Конфигурация NGINX файл, который я пытался портировать:

сервер
{
  слушать 80 default_server;
  слушать [::]:80 default_server;

  корень /var/www/html;

  # Добавьте index.php в список, если вы используете PHP
  индекс index.php index.html;

  имя_сервера локальный хост;

  место расположения /
  {
    try_files $uri $uri/ =404;
  }

  # передать PHP-скрипты на сервер FastCGI
  расположение ~ \.php$
  {
    включить фрагменты/fastcgi-php.conf;
    # # С php-fpm (или другими сокетами unix):
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    # # С php-cgi (или другими сокетами tcp):
    # fastcgi_pass 127.0.0.1:9000;
  }

  местоположение/подкаталог
  {

    корень /var/www/html/подкаталог;
    индекс index.php;
    try_files $uri $uri//index.php$args$query_string

    расположение ~ ^/(.+)
    {
    }

    местоположение/страница
    {
      переписать ^/page/?$ /pages/page.php break;
    }

    местоположение / о
    {
      переписать ^/about/?$ /pages/about.php break;
    }

    местоположение/конфиденциальность
    {
      переписать ^/privacy-policy/?$/pages/privacy-policy.php break;
    }

    местоположение/контакт
    {
      переписать ^/contact/?$ /pages/contact.php break;
    }

    расположение/условия
    {
      переписать ^/terms/?$ /pages/tos.php break;
    }

    место расположения /
    {
      если (-e $request_filename)
      {
        переписать ^/sitemap-([0-9]+).xml$ /parts/sitemaps/sitemap-$1.xml break;
      }
      переписать ^/(.*)/(.*)/(.*)/(.*)/?$ /index.php?bank=$1&state=$2&district=$3&branch=$4 break;
      переписать ^/(.*)/(.*)/(.*)/?$ /index.php?bank=$1&state=$2&district=$3 break;
      переписать ^/(.*)/(.*)/?$ /index.php?bank=$1&state=$2 break;
      переписать ^/(.*)/?$ /index.php?bank=$1 break;
    }

    расположение ~ /подкаталог /(.+\.php)$
    {
      включить фрагменты/fastcgi-php.conf;
      # С php-fpm (или другими сокетами unix):
      fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
      # С php-cgi (или другими сокетами tcp):
      # fastcgi_pass 127.0.0.1:9000;
    }

  }
}
NoobAvi avatar
флаг cn
Пожалуйста, помогите мне, кто-нибудь, я так устал пытаться :(
Рейтинг:1
флаг fr

Это должно работать для вашего случая. Вдохновленный доступным решением @ https://serversforhackers.com/c/nginx-php-в-подкаталоге

Окончательный файл конфигурации:

сервер
{
  слушать 80 default_server;
  слушать [::]:80 default_server;

  корень /var/www/html;

  # Добавьте index.php в список, если вы используете PHP
  индекс index.php index.html;

  имя_сервера локальный хост;

  место расположения /
  {
    try_files $uri $uri/ =404;
  }

  # передать PHP-скрипты на сервер FastCGI
  расположение ~ \.php$
  {
    включить фрагменты/fastcgi-php.conf;
    # # С php-fpm (или другими сокетами unix):
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    # # С php-cgi (или другими сокетами tcp):
    # fastcgi_pass 127.0.0.1:9000;
  }

  # для подкаталога
  местоположение/подкаталог
  {
    псевдоним /var/www/html/подкаталог; 
    try_files $uri $uri/ @subdirectory; # отправить все запросы в адрес с тегом @subdirectory

    расположение ~ \.php$
    {
      включить фрагменты/fastcgi-php.conf;
      fastcgi_param SCRIPT_FILENAME $request_filename;
      fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
  }

  местоположение @подкаталог
  {
    переписать /subdirectory/about$ /subdirectory/pages/about.php последним;
    переписать /subdirectory/privacy-policy$ /subdirectory/pages/privacy-policy.php последним;
    переписать /subdirectory/contact$ /subdirectory/pages/contact.php последним;
    переписать /subdirectory/page$ /subdirectory/pages/page.php последним;
    переписать /subdirectory/terms$ /subdirectory/pages/tos.php последним;

    переписать ^/subdirectory/sitemap-([0-9]+).xml$ /subdirectory/parts/sitemaps/sitemap-$1.xml последним;

    переписать ^/subdirectory/(.*)/(.*)/(.*)/(.*)/?$ /subdirectory/index.php?bank=$1&state=$2&district=$3&branch=$4 last;
    переписать ^/subdirectory/(.*)/(.*)/(.*)/?$ /subdirectory/index.php?bank=$1&state=$2&district=$3 последним;
    переписать ^/subdirectory/(.*)/(.*)/?$ /subdirectory/index.php?bank=$1&state=$2 последним;
    переписать ^/subdirectory/(.*)/?$ /subdirectory/index.php?bank=$1 последним;

  }

}

Если у вас есть сомнения, пожалуйста, спросите. Кроме того, спасибо вам за такой вопрос, я должен узнать что-то новое, так как я тоже новичок :P; Ваше здоровье !!

NoobAvi avatar
флаг cn
Спасибо. Работает абсолютно отлично.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.