# 서브폴더 사용 시 svg-sprite에서 발생하는 Discourse\_docker (blocked:csp) 오류

**URL:** https://meta.discourse.org/t/discourse-docker-blocked-csp-error-with-svg-sprite-when-using-subfolders/139492
**Category:** Bug
**Created:** [1월 23, 2020, 2:50오전 UTC](https://meta.discourse.org/t/discourse-docker-blocked-csp-error-with-svg-sprite-when-using-subfolders/139492 "2020-01-23T02:50:20Z")
**Posts on this page:** 1
**Showing post:** 9

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [1월 27, 2020, 5:40오후 UTC](https://meta.discourse.org/t/discourse-docker-blocked-csp-error-with-svg-sprite-when-using-subfolders/139492/9 "2020-01-27T17:40:19Z")

</div>

서브폴더 시나리오에서 SVG 스프라이트를 처리하는 로직은 이미 모두 갖춰져 있으며, 여러 사이트에서 성공적으로 사용되고 있습니다. 이번 경우에는 매우 구체적인 엣지 케이스에 부딪힌 것입니다. @vkozyrev의 사이트에서 주요 변수들을 확인해 보겠습니다(브라우저 콘솔에서).

```js
> Discourse.SvgSpritePath
"/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js"
> Discourse.BaseUri
"/sales-community"

```

문제없어 보입니다. 이제 SVG 스프라이트 시트를 로드할 때 `loadScript`를 사용하는데, 이는 다시 `Discourse.getURL`을 호출합니다. 이 함수는 서브폴더 접두사를 추가하는 역할을 합니다. 직접 테스트해 보겠습니다:

```js
> Discourse.getURL(Discourse.SvgSpritePath)
"/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js"

```

음… 아무것도 일어나지 않았습니다. 다른 랜덤 URL은 잘 동작합니다:

```js
> Discourse.getURL("/blah")
"/sales-community/blah"

```

조금 더 파고들면 `getUrl` 내부의 [이 라인](https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse.js.es6#L32)을 찾을 수 있습니다.

```js
if (url.indexOf(Discourse.BaseUri) !== -1) return url;

```

즉, 영어로 "URL에 이미 서브폴더 접두사가 포함되어 있으면 포기한다"는 의미입니다. 따라서 여기의 문제는 @vkozyrev의 서브폴더 접두사(`/sales-community`)가 SVG 스프라이트 시트 URL의 중간에 포함되어 있다는 점입니다.

```
/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js
```

이 검사를 더 구체적으로 변경하여, URL의 **시작 부분** 에서만 서브폴더 접두사를 확인하도록 했습니다:

> <https://github.com/discourse/discourse/pull/8794>
>
> https://meta.discourse.org/t/discourse-docker-blocked-csp-error-with-svg-sprite-…when-using-subfolders/139492/9

다만, 이로 인해 다른 잠재적인 문제들도 생각납니다… 예를 들어, 누군가가 서브폴더 접두사로 `/t`나 `/about` 또는 Discourse에서 사용하는 다른 URL을 원한다면 어떻게 될까요 🤔

---

_[View the full topic](https://meta.discourse.org/t/discourse-docker-blocked-csp-error-with-svg-sprite-when-using-subfolders/139492)._
