URL에서 .html을 제거하는 방법?


112

.html정적 페이지의 URL에서 제거하는 방법은 무엇입니까?

또한 URL이없는 URL로 리디렉션해야 .html합니다. (예 www.example.com/page.htmlwww.example.com/page).


1
"remove .html"은 ".html이 존재하지 않아도된다"는 의미입니까?
궤도에서 가벼운 경주

@Tomalak : 예, ".html"이있는 URL을없는 URL로 리디렉션합니다. 내 문제는 이것이 무한 리디렉션으로 이어진다는 것입니다. 내 현재 설정에서는 www.example.com/page.html 및 www.example.com/page 모두 SEO 친화적이지 않은 액세스가 가능합니다.
Dave


@Tomalak : 팁 주셔서 감사합니다. mod_rewrite의 문서를 읽는 것은 매우 도움이되었습니다.
데이브

답변:


105

Jon의 대답에 대한 설명 이 건설적 이라고 생각 합니다. 다음과 같은:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

지정된 파일 또는 디렉터리가 각각 존재하지 않는 경우 다시 쓰기 규칙이 진행되는지 확인합니다.

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

그러나 그것은 무엇을 의미합니까? 그것은 사용하는 정규 표현식 (정규 표현식) . 여기 제가 아까 만든 것입니다 ... 여기에 이미지 설명 입력

나는 그것이 맞다고 생각 한다.

참고 : 테스트 할 때 301 리디렉션을 사용 .htaccess 하지 마십시오 . 브라우저가 301을 캐시하므로 테스트가 끝날 때까지 302를 사용하십시오. 참조 https://stackoverflow.com/a/9204355/3217306를

업데이트 : 약간 착각 .하여 개행 문자를 제외한 모든 문자와 일치하므로 공백이 포함됩니다. 또한 여기에 유용한 정규식 치트 시트가 있습니다.

출처 :

http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2

https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules


6
답을 설명하는 데 도움이되는 훌륭한 다이어그램.
Ric

301s와 브라우저 캐시에 대한 팁이 내 문제를 해결 한 것입니다.
bgfvdu3w

@KnocksX 내가 도울 수있는 위치에 더 이상 웹 마스터입니다 없으며 아니다
binaryfunt

84

URL에서 .html 확장자를 제거하려면 root / htaccess에서 다음 코드를 사용할 수 있습니다.

RewriteEngine on


RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

참고 : 예를 들어 .php 확장자를 제거하기 위해 다른 확장자를 제거하려면 위 코드에서 htmlphp 로 바꾸십시오 .


10
다른 답변 중 어느 것도 나를 위해 일하지 않았지만 이것은 정말 감사합니다!
개미 Arries

2
이것은 또한 나를 위해 일했습니다. 감사합니다 @starkeen. ^ 투표하십시오.
JeremyS

2
완벽하게 잘 작동했습니다. 감사합니다!
ixany

이것은 나를 위해 파일 확장자를 제거하지만 해당 페이지로 리디렉션되지 않습니다
Bhargav Venkatesh

74

아파치에서 .htaccess를 사용하면 다음과 같이 리디렉션을 수행 할 수 있습니다.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

URL에서 .html을 제거하려면 .html이없는 페이지로 연결하기 만하면됩니다.

<a href="http://www.example.com/page">page</a>

23
이것은 나를 위해 아무것도하지 않습니다. 작동하지 않는 이유가 있습니까?
Michael Yaworski 2014

요청한 링크에 대한 실제 파일이 있습니까? 즉, 트리거 것!-f
마티

72

이것은 당신을 위해 작동합니다.

#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

3
이 코드로 Godaddy에서 404를 얻었고 맨 위에 Options + FollowSymLinks -MultiViews -Indexes를 넣어 수정했습니다.
Labanino 2014

1
나는 이것이 가장 좋고 가장 완전한 대답이라고 생각합니다. 감사합니다!
ctekk

localhost에서이 작업을 시도했지만 작동하지 않습니다. 다른 작업이 필요합니까? .htaccess 파일을 연결해야합니까? 아니면 페이지에서 어떻게 인식합니까?
Pianistprogrammer dec.

example.com/page.html에서 example.com/page로 # 301에 .php 확장자를 추가하려면 어떻게해야합니까?

20

당신도 가지고 있는지 확인해야합니다 Options -MultiViews.

위의 어느 것도 표준 cPanel 호스트에서 나를 위해 일하지 않았습니다.

이것은 작동했습니다.

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

위의 모든 답변 중에서 마침내 작동했습니다. 내 사이트가 cPanel과 함께 godaddy에서 호스팅되기 때문에 나는 믿습니다. 핵심은 옵션 -MultiViews
Brad Vanderbush

예,이 섹션의 어떤 것도이 답변을 기대하지 않습니다! 당신은 하루를 구했습니다!
Neil Bannet

고마워 친구. 왜 다른 사람들이 예상대로 작동하지 않았는지 잘 모르겠습니다.
Nanoo

13

답장 해 주셔서 감사합니다. 나는 이미 내 문제를 해결했습니다. http://www.yoursite.com/html 아래에 내 페이지가 있다고 가정 하면 다음 .htaccess 규칙이 적용됩니다.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
   RewriteRule .* http://localhost/html/%1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
   RewriteRule .* %1.html [L]
</IfModule>

6

내 URL 사이트에서 .html 확장을 제거하기 위해이 .htacess를 사용합니다. 올바른 코드인지 확인하십시오.

    RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]

여기에 제시된 다른 솔루션과 달리 이것은 저에게 효과적이었습니다. 감사합니다. 그래도 HTML의 링크를 업데이트해야한다는 점을 추가하겠습니다 (원래 .html 파일에 <a href="page1.html"> </a>로 링크하는 경우 업데이트해야합니다. <a href=" example.com/page1"> </ a >로 입력하면 작동합니다.)
Lorenzo

저에게있어 핵심적인 변화는 RewriteBase /비트였습니다. 불행히도 나는 그것이 왜 효과가 있었는지 이해하지 못하지만 곧 배울 것 같습니다.
Keno Clayton

4

Firebase 호스팅을 사용하는 사람들에게는이 페이지에서 어떤 답변도 작동하지 않습니다. .htaccessFirebase 호스팅에서 사용할 수 없기 때문 입니다. firebase.json 파일을 구성해야합니다. "cleanUrls": true파일에 줄 을 추가 하고 저장하십시오. 그게 다야.

줄을 추가하면 firebase.json은 다음과 같습니다.

{
  "hosting": {
    "public": "public",
    "cleanUrls": true, 
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

2

URL에서 .html 확장자를 제거하려면 root / htaccess에서 다음 코드를 사용할 수 있습니다.

#mode_rerwrite start here

RewriteEngine On

# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.

RewriteCond %{REQUEST_FILENAME} !-d

#Check for file in directory with .html extension 

RewriteCond %{REQUEST_FILENAME}\.html !-f

#Here we actually show the page that has .html extension

RewriteRule ^(.*)$ $1.html [NC,L]

감사


-1
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

이것을 시도하십시오 :) 작동하는지 모르겠습니다.


4
작동 여부가 확실하지 않은 경우 답변으로 게시해서는 안됩니다.
중요합니까
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.