.htaccess 파일에서 URL 재 작성을 어떻게 구현합니까?


17

사용자 대신 주소를 볼 수 있도록 URL을 다시 작성하고 싶습니다 (왜? 이 질문을 참조하십시오 ).

labouseur.com/course-compilers.html 

그들은 대신보고 간단하게 사용할 수 있습니다

labouseur.com/course-compilers

(아마도 코스 / 컴파일러가되도록 재구성해야합니다.)

내 웹 사이트에 Linux 기반 공유 호스팅 서비스를 사용하고 있으므로 서버를 관리 제어 할 수 없지만 .htaccess를 제어 할 수 있습니다. 온라인에서 읽은 참고 문헌은 나에게 분명하지 않은 것 같으므로 여기에서 약간의 명확성과 조언을 찾고 있습니다.


이것은 서버 설정 (.htaccess) 에서만 수행하는 것이 아닙니다 . 중요한 첫 번째 단계는 실제로 응용 프로그램에서 URL을 변경하는 것입니다. 그렇지 않으면 불필요한 리디렉션 (또는 중복 된 콘텐츠)이 많이 발생합니다.
MrWhite

답변:


13

실제로 서버의 파일에서 .html을 제거하고 htaccess에서 설정을 설정하여 html 파일로 제공되도록 할 수는 있지만 원하는 것은 아닙니다.

이 작업을 수행 :

RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html

중복 콘텐츠 문제가 걱정되는 경우 특히 복잡합니다. 위 규칙에 따라 이전 URL에서 페이지에 계속 액세스 할 수 있습니다.
JasonBirch

3

먼저 아파치에 모듈이 있고 .htacces 파일에서 허용되는지 확인한 후 다음을 추가하십시오.

RewriteEngine on

# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1 

당신의 예는

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html

단일 레벨 디렉토리 구조 및

RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html

다단계 구조의 경우.

하지만 조심해

구조가 있다면

/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess

자식 .htaccess파일 의 다시 쓰기 규칙은 상위 폴더와 관련이 있으며 지저분한 다시 쓰기 루프 상황에 처할 수 있습니다. 가능 RewriteCond하면 이런 일이 일어나지 않도록하십시오 !


마지막 지점에 대해 더 자세히 설명 하시겠습니까 (RewriteCond를 사용하여 루프 중지)?
트래비스 노스 컷

2

위의 답변 외에도 사용할 수 있습니다

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]

([\w-]+) 하이픈 (-)으로 문자, 숫자를 허용합니다.

(.*) 액세스 할 때 내부 서버 오류를 발생시키는 다른 다음 규칙을 위반할 수 있습니다.


귀하의 RewriteRule 패턴이 질문에 주어진 특정의 예를 들어 허용 대답에 비해 개선, 그러나, 예를 들어, 하나 개 이상의 경로 세그먼트가있을 때 더 일반적인 경우와 일치 할 수 없게됩니다. /path/to/course-compilers. L다음 규칙에 대한 영향을 줄이려 면 플래그를 포함하십시오 . 동안 (.*)패턴이 불필요 일반적이며,이 때문에의 심각한 문제를 일으킬 가능성이 상태 파일이 존재를 확인하는 것이.
MrWhite

1

이를 위해 .htaccess 파일을 사용할 필요는 없습니다. 파일을 디렉토리로 구성하고 "labouseur.com/course-compilers.html"을 사용하는 대신 index.html 파일의 이름을 지정하고 "course-compilers"라는 디렉토리에 넣으십시오. 그런 다음 해당 디렉토리를 가리키면 기본적으로 색인이 제공되지만 URL에는 표시되지 않습니다. 따라서 "labourseur.com/course-compilers"로 링크를 작성하면됩니다.

.htaccess가 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.