2012-03-20 2 views
0

어디에서나 온라인으로 보이는 htaccess 자습서는 모두 매우 기본입니다. 그들 중 누구도htaccess turorials를 얻을 수있는 곳

RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC] 
RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L] 

[NC][R=301,L] 평균은 %{HTTP_HOST} 토큰에 왔는가 또한

(I은 301 REDIR의 상점을 파악할 수) 어떻게 설명하지? 다른 사람들은 무엇입니까? $1은 언제 촬영 되었습니까? ...

이 모든 것을 설명하는 자습서가 있습니까?

편집 :

Options -Indexes 
ErrorDocument 404 /404.php 
CheckSpelling on 

RewriteEngine On 
RewriteBase/ 
###### Check for alias module to be installed ###### 

###### Domain without www ###### 
RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC] 
RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L] 

###### End www rewrite section ###### 

# Remove multiple slashes anywhere in URL 
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ 
RewriteRule . %1/%2 [R=301,L] 

# Remove multiple slashes after domain 
RewriteCond %{HTTP_HOST} !="" 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ 
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?$1 [L] 

# show mysite.com/index.php always as mysite.com/ 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ 
RewriteRule ^index\.php$ http://mysite.com/ [R=301,L] 

www.mysite.com/index.php/////index.php 그들에 [L] 스위치

+0

자습서는 참조가 아닙니다. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html –

답변

1

아파치 .htaccess 파일은 Mod Rewrite과 같은 표준 아파치 구성을 사용합니다. Mod Rewrite 문서는 RewriteCond 및 RewriteRule이 작동하는 방식을 설명합니다.

나는 당신의 ModRewrite 질문을 무너 뜨리는 것입니다

RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC] 
  • RewriteCond는 재 작성이 발생 여부를 결정하는 조건이다.
  • %{HTTP_HOST}가한다 RewriteCond 패턴을 요청
  • ^www\.mysite\.com$의 호스트 이름이다 확인 수단, 검사 호스트 이름 www.mysite.com
  • [NC] 일치하는 경우가 더 케이스 의미없는 패턴과 일치하는 경우를 만든다 누군가가 http://www.mysite.com/index.html를 요청하는 경우 RewriteCond 호스트 www.mysite를 확인할 것, 예를 들어,

-insensitive.com^www\.mysite\.com$ 패턴과 일치하며 일치하므로 다음 RewriteRule이 실행됩니다.

RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L] 
  • RewriteRule

    요청
  • ^(.*)$ 모든 것을 일치 패턴입니다 재 작성하는 전동 공구이다. 패턴이 일치하지 않으면 RewriteRule이 실행되지 않습니다.
  • http://mysite.com/$1은 기본적으로 www. mysite.com에서 mysite.com으로 요청을 변경합니다.
  • [R=301,L]은 다시 쓰기가 301 리디렉션을 보내고 마지막 다시 쓰기 규칙이어야 함을 의미합니다.

한다 RewriteCond를 전달 http://www.mysite.com/index.html의 예를 계속, /index.html를가 ^(.*)$ 패턴과 일치하는 것, 재 작성은 http://mysite.com/index.html로 설정됩니다 및 일어날 리디렉션 및 더 이상의 RewriteRules로 전송.


는 편집 : 내 경험부터 설정

을 숙고, 당신은 당신의 설정의 상단에있는 모든 리디렉션을합니다. 특히 원인을 밝히기 위해 URL을 정상화하려했으나 요청이 일련의 리디렉션을 통해 씻겨집니다. 끝나면 올바른 내용을 제공하도록 다시 작성합니다. 염두에두고, 여기에 지난 2 규칙의 불통 설정입니다 : 나는 RewriteCond %{THE_REQUEST} 확인할 수 없습니다 내 머리 위로 떨어져

# show mysite.com/index.php always as mysite.com/ 
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ 
    RewriteRule ^index\.php$ http://mysite.com/ [R=301,QSA,L] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^/(.*)$ /index.php?a_param=$1 [QSA] 

,하지만 좋아 보인다. [QSA] 플래그가 쿼리 문자열 인을 추가하고 싶습니다. 이로 인해 http://mysite.com/index.php?user=blahhttp://mysite.com/?user=blah으로 리디렉션됩니다. 리디렉션과 함께 쿼리 문자열을 전달해야하는 경우 QSA를 다른 리디렉션에 추가해야합니다.

마지막 규칙은 index.php가 htaccess (디렉토리, 이미지, js 등) 디렉토리의 정적 컨텐츠에 비해 사용해야하는지 여부를 결정합니다. 리디렉션은 아니지만 재 작성으로 사용하고 싶습니다. [R] 또는 [L]을 사용하지 말고 [QSA]를 다시 추가하십시오. 일치하는 패턴은 index.php에 전달 된 특정 매개 변수로 설정되어야합니다. 에에 http://mysite.com/?user=blah 리디렉션 다음으로 http://mysite.com/index.php?user=blah을 야기 이전 규칙과 결합

이 다시 쓰면 http://mysite.com/?a_page=&user=blah에 index.php가 사용됩니다. http://mysite.com/a_page?id=7 요청은 다시 작성되므로 index.php가 사용됩니다. http://mysite.com/?a_param=a_page&user=blah

+0

하나 이상의 재 작성 규칙을 가진 많은 htaccess 파일을 보았습니다. 첫 번째 파일이 실행되지 않으면'[L]'이 아무 의미가 없습니까? – qwertymk

+0

맞음, 즉 하나의 RewriteRule 만 실행됩니다. 일반적으로 규칙의 겹침을 방지하기위한 것입니다. RewriteRule 패턴은 규칙 실행 여부를 결정하므로 요청에 따라 매번 첫 번째 RewriteRule이 실행되지 않습니다. – mguymon

+0

내 htaccess가 한 번에 두 개 이상의 규칙을 적용하고 있으며 모두 '[L]'스위치가 있습니다. – qwertymk

1

체크 아웃 Apache documentation 세 가지 규칙을 각 인 mysite.com에 변경됩니다 : 여기 mguymon 내 htaccess로 파일입니다. 대괄호 안의 모든 옵션이 의미하는 바를 설명합니다.

  • [NC]에는 케이스 (또는 대소 문자 구분)
  • [R=301]는 301 (영구)이다
  • [L] 마지막 규칙 수단 리디렉션 또는

%{HTTP_HOST} 개서 정지이다없는 나타내는 server or environment variable 인 호스트의 기본 URL (예 : www.example.com).

정규 표현식을 이해한다면, 당신은 또한 시작 ^ 사이 (.*) 일치하는 모든 문자를 그룹화하는 것을 이해하고 다음 $1로 두 번째 부분에서 사용할 수있는 경로 (전체 경로)의 $을 종료해야합니다.

+0

편집을 참조하십시오.'[L]'플래그는 더 많은 규칙을 적용하는 것을 멈추지 않습니다. – qwertymk

관련 문제