>백엔드 개발 >Golang >Go HTTP 서버의 URL에서 .html 확장자를 제거하는 방법은 무엇입니까?

Go HTTP 서버의 URL에서 .html 확장자를 제거하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-28 03:19:31873검색

How to Remove the .html Extension from URLs in Your Go HTTP Server?

사용자 정의 파일 시스템을 사용하여 .html 확장자 제거

URL에 .html 확장자가 표시되지 않도록 하려면 한 가지 접근 방식은 http.Dir을 사용하는 http.FileSystem 인터페이스. 이 솔루션은 http.FileServer의 강력한 코드를 활용합니다.

이를 구현하려면 http.Dir을 포함하는 사용자 정의 유형을 생성하세요.

<code class="go">type HTMLDir struct {
    d http.Dir
}</code>

이 사용자 정의 파일 시스템을 사용하도록 기본 기능을 수정하세요 http.FileServer 대신:

<code class="go">func main() {
    fs := http.FileServer(HTMLDir{http.Dir("public/")})
    http.Handle("/", http.StripPrefix("/", fs))
    http.ListenAndServe(":8000", nil)
}</code>

다음으로 HTMLDir 유형에 대한 Open 메서드를 정의합니다. 이 방법은 파일 시스템이 파일 요청을 처리하는 방법을 결정합니다.

항상 .html 확장자 사용:

<code class="go">func (d HTMLDir) Open(name string) (http.File, error) {
    return d.d.Open(name + ".html")
}</code>

.html 확장자로 대체 :

<code class="go">func (d HTMLDir) Open(name string) (http.File, error) {
    f, err := d.d.Open(name)
    if os.IsNotExist(err) {
        if f, err := d.d.Open(name + ".html"); err == nil {
            return f, nil
        }
    }
    return f, err
}</code>

파일 이름으로 대체(확장자 없음):

<code class="go">func (d HTMLDir) Open(name string) (http.File, error) {
    f, err := d.d.Open(name + ".html")
    if os.IsNotExist(err) {
        if f, err := d.d.Open(name); err == nil {
            return f, nil
        }
    }
    return f, err
}</code>

위 솔루션을 구현하면 . Go HTTP 서버에 액세스할 때 URL의 html 확장자를 사용하세요.

위 내용은 Go HTTP 서버의 URL에서 .html 확장자를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.