"Сховати" .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 / index, також порушило завантаження .css, .js тощо
aspiringGuru
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.