Конвертировать файл htaccess в файл nginx try_file для подпапки - PullRequest
0 голосов
/ 03 ноября 2019
  RewriteEngine On
  RewriteRule ^([^\.]+)$ $1.html [NC,L]

Как преобразовать файл Apache .htaccess в файл nginx try_file?

У меня есть статические html-файлы в следующей структуре папок, и я обращаюсь к ним с красивым стилем URL без расширений .html, он работал с apache, но когда я пытался конвертировать конфигурацию nginx, он выбрасывал 404 для подпапок. Я использовал https://winginx.com/en/htaccess сайт для конвертации.

# nginx configuration

location / {
  rewrite ^/([^\.]+)$ /$1.html break;
}
+ root-folder  
  + index.html  - url - www.hello.com
  + abc.html  - url - www.hello.com/abc
  + .........   
  + xyz.html  - url - www.hello.com/xyz  
  + category-folder   
     + category1.html  - url - www.hello.com/category-folder/category1
     + category2.html  - url - www.hello.com/category-folder/category2
     + category3.html  - url - www.hello.com/category-folder/category3
  + page-folder 
     + page1.html - url - www.hello.com/page-folder/page1
     + page2.html - url - www.hello.com/page-folder/page2
     + page3.html - url - www.hello.com/page-folder/page3

Любая помощь будет действительно ограничена.

1 Ответ

1 голос
/ 03 ноября 2019

try_files - это хорошая директива для шаблонов динамического каркаса фронт-контроллера, работающего на PHP или других языках, где у вас есть один файл начальной загрузки, например, /index.php, который "обслуживает" дружественные для SEO URL-адреса:

/foo/ -> /index.php
/bar/ -> /index.php
/lorem/ipsum -> /index.php

Если ваши файлы статичны и вы заранее знаете структуру файлов, try_files не приносит ничего, кроме потери производительности системных вызовов stat (проверка существования файла).

Напримерприменение try_files $uri $uri.html $uri/ =404; из комментария Ричарда будет означать, что для URI /category-folder/category1, NGINX сначала проверяет, существует ли вначале фактический файл /category-folder/category1, затем проверяет, существует ли /category-folder/category1.html, и, если нет, проверяет, /category-folder/category1/ каталог существует.

Имеет смысл придерживаться rewrite, и преобразование конфигурации в этом случае довольно просто. Это приведет к совпадению 1: 1 с тем, как это работает в Apache.

Использование моего "довольно сложного" конвертера конфигурации Apache в NGINX , который определяет, когда вам нужно использовать try_filesа если нет, вы получите желаемую перезапись (поместите это непосредственно в контекст server, а не в location):

rewrite ^/([^\.]+)$ /$1.html last;

Чтобы проверить эту перезапись, вы можете использовать этот тест .

Как видите, единственная хитрость заключается в том, что URI в NGINX переписываются (и URI, указанные в NGINX в целом) должны начинаться с косой черты, тогда как в Apache они опускаются.

...