«Hide» .html Расширения файлов с помощью nginx переписывает

16

Я обслуживаю статический сайт через nginx, и моя цель - заменить URL-адреса, которые выглядят следующим образом:

http://foo.com/bar.html

с

http://foo.com/bar

Ключом не является косая черта. В настоящее время я делаю нечто подобное, используя псевдонимы местоположения, но это утомительно, потому что для каждого файла требуется блок местоположения, а также добавляется косая черта, поскольку nginx рассматривает псевдонимы как каталоги:

    location / {
        root    /srv/www/foo/public_html;
        index   index.html;
    }

    location /bar1 {
        alias /srv/www/foo/public_html/;
        index bar1.html;
    }

    location /bar2 {
        alias /srv/www/foo/public_html/;
        index bar2.html;
    }

И так далее. Я прочитал документацию по переписыванию, и я не могу синтезировать то, что говорится, и то, что мне нужно для этого. Я не прихожу из Apache. nginx - мой первый набег на веб-серверы, поэтому я уверен, что упускаю что-то очевидное, так как мой HTTP-фон слабый. Заранее благодарим за любую помощь, которую вы можете предоставить.

Даг Стивен
источник

Ответы:

17

try_files должно быть то, что вы хотите.

Что-то вроде этого:

try_files $uri.html $uri $uri/ =404;
Шейн Мэдден
источник
1
Это сработало, за небольшим исключением, что $ uri.html вызывал 500. Мне пришлось использовать «$ {uri} .html».
Даг Стивен
4
Изменение этого параметра try_files $uri.html $uri/ =404;будет лучше для SEO, поскольку у вас не будет двух URL-адресов foobar.com/bar и foobar.com/bar.html, указывающих на один и тот же ресурс.
Хаджа Минхаджуддин
5

Согласно комментарию от @Khaja, лучший ответ:

try_files $uri.html $uri/ =404;

Так что обслуживается только одна копия ресурса (без расширения .html). Вы не хотите делить силу ссылок на несколько URL-адресов, обслуживающих дублированный контент. Найдите документацию здесь .

Брайс
источник
Я попробовал это. try_files $ uri.html $ uri / = 404; она сломалась загрузку домашней страницы без выдвигающих myurl / индекс также прогореть загрузку .css, .js и т.д.
aspiringGuru