Неожиданное поведение конечной косой черты при хостинге Firebase

Я наблюдаю неожиданное поведение (по крайней мере, на мой взгляд) с конечными косыми чертами на хостинге Firebase. Я ожидаю, что Firebase будет обслуживать URL-адреса с косой чертой в конце (за исключением фактических файлов, находящихся в каталоге хостинга). Для этого я установил trailingSlash в true в firebase.json.

Это привело к:

example.com                     redirect to     example.com/index.html/
example.com/js/script.js        redirect to     example.com/js/script.js/
example.com/images/image.png    redirect to     example.com/images/image.png/

Ожидаемое поведение:

example.com                     redirect to example.com/
example.com/js/script.js        served as it is without any redirect
example.com/images/image.png    served as it is without any redirect

Добавление завершающей косой черты к фактическим URL-адресам файлов заставляет браузер / сервер думать, что script.js является каталогом, а не файлом, и приводит к ошибке 404. Добавление index.html в корень просто не изящно.

Ожидая, что cleanUrls выполнит трюк, я установил cleanUrls в true вместе с trailingSlash, и тут же сайт перешел в бесконечный цикл перенаправления и не загрузился. Как я могу запретить Firebase добавлять index.html в корень и завершающую косую черту для фактических js или изображений?

Редактировать:

По просьбе Фрэнка я использую firebase.json:

{
    "firebase"          : "example",
    "public"            : "public",
    "cleanUrls"         : false,
    "trailingSlash"     : true,
    "ignore"            : [ "firebase.json", "**/.*", "**/node_modules/**" ],
    "rewrites": [{

        "source"        : "**",
        "destination"   : "/index.html"

    }],
    "headers": [{

        "source"    : "**/*.@(eot|otf|ttf|ttc|woff|font.css)",
        "headers"   : [{

            "key"   : "Access-Control-Allow-Origin",
            "value" : "*"
        }]

    }, {

        "source"    : "**/*.@(jpg|jpeg|gif|png)",
        "headers"   : [{
            "key"   : "Cache-Control",
            "value" : "max-age=600"
        }]

    }, {

        "source"    : "**/*.@(html|js)",
        "headers"   : [{
            "key"   : "Cache-Control",
            "value" : "max-age=300"
        }]

    }]
}

P.S .: Я попытался установить trailingSlash и cleanUrls на true, а также попытался установить эти true/false по отдельности.


person Vinny    schedule 27.01.2016    source источник
comment
@FrankvanPuffelen См. Обновленный вопрос.   -  person Vinny    schedule 28.01.2016
comment
@FrankvanPuffelen Надеюсь, у вас была возможность посмотреть редактирование, как вы просили?   -  person Vinny    schedule 28.01.2016


Ответы (4)


https://firebase.google.com/docs/hosting/full-config#trailingslash

Если установлено значение true, URL-адреса будут перенаправлены на добавление косой черты в конце. Если установлено значение false, URL-адреса будут перенаправлены для удаления завершающей косой черты. Если не указано иное, завершающие косые черты используются только для файлов индекса каталогов (например, about / index.html).

Только не добавляйте эту опцию, и она повлияет только на URL-адреса.

person jake    schedule 14.05.2017

Что касается вашего вопроса, если вы хотите вызвать команду «rewrites», Сервер может выполнить команду «rewirtes», когда он не может найти какой-либо index.html в вашем корневом каталоге.

Решение первое: вы просто помещаете index.html в корневой каталог в вашу «общую» папку. Я переключаюсь в вашу общую папку и развертываю ваш сервер.

Решение второе: вы помещаете index.html в какую-то папку, которую вы можете назвать как угодно. Затем используйте формат JSON: "rewrites": [{ "source" : "**", "destination" : "/folderName/index.html" }],, но вы не можете поместить index.html в корневую папку.

Решение третье: вы создаете корневую папку, помещаете свои папки JS / CSS / IMG / и index.html в корневую папку. Затем вы развертываете файл JSON сервера, как это.

{
"firebase": "you app name",
"public": ".",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
person Lei Zhang    schedule 29.01.2016
comment
Я безуспешно следовал изложенным вами решениям. Вероятно, я не совсем ясно изложил суть проблемы. Проблема заключается в том, что trailingSlash, когда установлено значение true, приводит к example.com перенаправлению на example.com/index.html/, example.com/js/script.js перенаправлению на example.com/js/script.js/ и example.com/css/style.css перенаправлению на example.com/css/style.css/. Обратите внимание на косую черту в конце URL-адресов файлов (script.js и style.css). Конечный слэш не следует добавлять к URL-адресам файлов. Добавление завершающей косой черты к URL-адресам файлов приводит к получению этих URL-адресов ... (см. Следующий комментарий) - person Vinny; 30.01.2016
comment
(продолжение) ... переписано на index.html. Затем у нас есть еще одна проблема example.com перенаправления на example.com/index.html/, что не очень элегантно. Вторая проблема снова вызвана установкой trailingSlash в true и не связана с правилами перезаписи. Я установил демо-версию Firebase, чтобы воссоздать проблему. Пожалуйста, перейдите по следующим ссылкам https://scorching-torch-3741.firebaseapp.com/css/style.css, https://scorching-torch-3741.firebaseapp.com/js/script.js и https://scorching-torch-3741.firebaseapp.com/. - person Vinny; 30.01.2016

Я уверен, что для Винни уже слишком поздно, но я столкнулся с той же проблемой. Добавление <base href='/'> в мои html-файлы предотвратило для меня неожиданное поведение конечной косой черты.

person Will    schedule 24.09.2019

"hosting": {
  "public": "...",
  "ignore": [...],
  "trailingSlash": false
}

Просто добавьте свойство trailingSlash и установите для него значение false, чтобы удалить завершающую косую черту при перенаправлении firebase. Ознакомьтесь с их подробной информацией здесь

person JayKan    schedule 16.02.2021