Назад | Перейти на главную страницу

Правила перезаписи Nginx портят изображения

Интересно, может ли кто-нибудь с опытом работы с nginx помочь мне с проблемой правила перезаписи, с которой я столкнулся.

Я хочу удалить .html и завершающие косые черты из своих URL-адресов, поэтому я помещаю следующий код в блок server {} в файле nginx conf.d:

error_page 404 404.html;
rewrite ^(/.+)\.html$ $1;
rewrite ^/(.*)/$ /$1 permanent;
try_files $uri.html $uri/ =404;

Это отлично работает, но изображения на моем сайте не работают. У меня они есть в папке Images, поэтому в моем HTML это как <img src="Images/someImage.jpg">. Раньше они отлично отображались до добавления кода перезаписи, но теперь они не загружаются, и когда я их проверяю, консоль Chrome сообщает: «Не удалось загрузить ресурс: net :: ERR_TOO_MANY_REDIRECTS», а рядом с этим написано http://example.com/Images/404.html

Если кто-то знает, что я здесь делаю неправильно, и может указать мне правильное направление, я буду очень признателен!

Есть несколько способов удалить расширение .html. Один из них является.

rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent;    # removing .html 
rewrite ^/(.*)/$ /$1 permanent;               # removing Trailing Slashes

мы должны убедиться, что Nginx знает, какие файлы искать, в основном все файлы с расширением .html, даже файлы индекса, например index.html. Таким образом, окончательный код будет примерно таким.

server { 
        # define you server name listen port etc.
        .......
        .......
        .......

        rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent;    # removing .html 
        rewrite ^/(.*)/$ /$1 permanent;               # removing Trailing Slashes

        # defining index with index.html, you can make it home.html or whatever you like.
        index index.html;                               

        # try getting only html files.
        try_files $uri/index.html $uri.html $uri/ $uri =404; 

        # defining error pages.
        error_page 404 /404.html; 
        error_page 500 502 503 504 /500.html;
}