nginx 다시 쓰기를 사용하는“숨기기”.html 파일 확장자


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;
    }

등등. 나는 다시 쓰기에 대한 문서를 읽었으며, 내가해야 할 일에 대해 말한 것을 합성 할 수없는 것 같습니다. 나는 아파치 배경에서 나오지 않는다. nginx는 웹 서버에 대한 첫 번째 길이므로 HTTP 배경이 약하기 때문에 분명한 것이 빠져 있다고 확신합니다. 제공 할 수있는 도움에 대해 미리 감사드립니다.

답변:


17

try_files 당신이 원하는 것이어야합니다.

이 같은:

try_files $uri.html $uri $uri/ =404;

1
이것은 $ uri.html이 500을 야기한다는 사소한 예외를 제외하고는 효과가있었습니다. "$ {uri} .html"을 사용해야했습니다.
Doug Stephen

4
동일한 리소스를 가리키는 try_files $uri.html $uri/ =404;두 개의 URL foobar.com/barfoobar.com/bar.html 이 없으므로 SEO를 현명하게 변경하는 것이 좋습니다 .
Khaja Minhajuddin

5

@Khaja의 의견에 따르면 가장 좋은 대답은 다음과 같습니다.

try_files $uri.html $uri/ =404;

따라서 하나의 리소스 사본 만 제공됩니다 (.html 확장자가없는 것). 중복 콘텐츠를 제공하는 여러 URL로 링크 강도를 나누고 싶지 않습니다. 여기 에서 설명서를 찾으 십시오 .


나는 이것을 시도했다. try_files $ uri.html $ uri / = 404; 또한,의 .js 등 .CSS의 파산로드를 myURL이 / 인덱스를 지명하지 않고 홈페이지의 로딩을 파산
aspiringGuru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.