Внешнее перенаправление URL в NGINX conf для добавления косых черт и использования файлов php

#php #apache #.htaccess #nginx-reverse-proxy

#php #apache #.htaccess #nginx-reverse-proxy

Вопрос:

Я новичок на этом сайте и новичок в NGINX, так что будьте любезны, пожалуйста. Я недавно перешел на AWS Elasticbeanstalk и нуждаюсь в помощи с настройкой NGINX. Я хочу сделать перенаправление, которое я знаю и протестировал, которое работает в apache2 с .htaccess, но я не могу выполнить с помощью NGINX.

Я хочу, чтобы все мои URL заканчивались косой чертой, проверьте, является ли $uri каталогом, если это так. используйте index.php если нет, используйте фамилию в качестве имени скрипта следующим образом:

Я хочу, чтобы этот URL: использовал этот скрипт:

https://localhost / -> ./index.php

https://localhost/page / -> ./page.php

https://localhost/folder/page / -> ./folder/page.php

https://localhost/folder/page/?param=foo -> ./папка/страница.php?param=foo

Я заставил его вести себя так в apache2 с помощью этой конфигурации в .htaccess:

 # To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.] ).php [NC]
RewriteRule ^ %1/ [R,L]

# add a trailing slash   
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule . %{REQUEST_URI}/ [L,R=301]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
  

Как я могу перевести этот .htaccess в конфигурационный файл NGINX?

Заранее спасибо.

Ответ №1:

Попробуйте использовать это, не забудьте перезапустить после вставки:

 location / {
    try_files $uri $uri.html $uri/ @extensionless-php;
    index index.html index.htm index.php;
}

location ~ .php$ {
    try_files $uri =404;
}

location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
}
  

Комментарии:

1. К сожалению, это работает некорректно. Запросы, не заканчивающиеся на .php, перенаправляются случайным образом. Например: localhost/foo/bar -> foo/bar

2. @salvamiguel Я думаю, что я неправильно понял ваш пост, я соответствующим образом обновил ответ.