2009-06-02 3 views
2

내 웹 사이트에서 URL 재 작성을 시도하고 있습니다. 여기 내 htaccess로의 내용입니다 : 내가 http://www.mysite.com/blog/을 시도하는 경우 Apache URL 재 작성,

RewriteEngine On 
RewriteRule ^blog/?$ index.php?page=blog [L] 
RewriteRule ^about/?$ index.php?page=about [L] 
RewriteRule ^portfolio/?$ index.php?page=portfolio [L] 
#RewriteRule ^.*$ index.php?page=blog [L] 

지금 3 주석 재 작성 규칙은, 완벽하게 작동, 나는 "약"에 대한 동일한 및 '포트폴리오', http://www.mysite.com/index.php?page=blog로 리디렉션. 그러나 블로그를 잘못 입력 한 경우 http://www.mysite.com/bloh/을 시도하면 분명히 404 오류가 발생합니다. 마지막 규칙 인 주석은이를 막기위한 것이 었습니다. 모든 URL은 블로그로 리디렉션되어야하지만 물론 이전 규칙을 성공적으로 사용한 경우에도이 규칙은 여전히 ​​구문 분석되므로 "마지막"플래그 ([L])를 사용했습니다. 마지막 규칙을 주석 처리하지 않으면 블로그, about 및 포트폴리오를 포함한 모든 항목이 블로그로 리디렉션됩니다. "last"플래그가 일치하는 규칙을 찾자 마자 실행을 중지하면 안됩니까?

감사합니다.

답변

2

당신은 같은 조건을 추가 할 수 있습니다. 당신은 같은 몇 가지 조건을 추가 할 수 있습니다 :

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

당신이 당신의 서버에 존재 실제 파일이나 디렉토리를 다시 작성하려고하지하고 있는지 확인하십시오. 그렇지 않으면 index.php가 그것들을 제공하지 않는다면 도달 할 수 없습니다!

+0

고마워, 고쳐! –

3

예, 마지막 플래그는이 요청에이 규칙 을 따르는 규칙을 적용하지 않음을 의미합니다..

URL을 다시 작성한 후 URL은 마지막으로 RewriteRule과 일치하는 새 재 작성 URL을 사용하여 내부 요청을하므로 리디렉션이 무한 루프가됩니다.

RewriteCond 지시어를 사용하면 index.php으로 시작하지 않는 URL로 다시 쓰기를 제한 할 수 있습니다. 여기에 (마지막 규칙) 중지 다시 쓰기 프로세스 및 더 규칙을 다시 적용되지 않습니다 |

1

아파치의 'L 마지막'mod_rewrite docs

에서. 이것은 Perl last 명령 또는 break 명령 C에 해당합니다.이 플래그를 사용하여 이 현재 재 작성된 URL이 다음 규칙에 의해 추가로 재 작성되지 않도록하십시오. 는 RewriteRule의이 이 요청을 재 주입되며 처리 처음부터 반복되게한다 (종종 때 는 별 디렉토리 문맥 재 기입이 발생하는) 내부 리디렉션을 생성하는 경우, 그러나, 기억 RewriteRule.

당신은

ErrorDocument 404 /index.php?page=blog 

사용할 수 있지만, 당신은 404 오류 코드를 반환하지 않는다는 사실을 알고 있어야하지만 그런 경우 리디렉션은 하나 모르겠어요 좋은 연습.

RewriteCond %{REQUEST_URI} !^index\.php 

나는 또한 RewriteRule ^.*$를 사용하여뿐만 아니라 미디어 요청 (CSS, JS, 이미지)을 모두 파괴 할 수있는 좋은 방법이라고 말할 수 있습니다 :

+0

답해 주셔서 감사합니다. 주의 깊게 살펴보면 현재 정규 표현식에는 선택 사항 인 후행 슬래시가 필요합니다. –

+0

오, 그래. 나는 그것을 보지 못했다. 죄송합니다 :) – andi

1

요청에 대해 [L] eave 처리를 수행하면 새 (재 작성된) URL에 대해 전체 처리가 다시 실행됩니다. 당신은 다른 규칙 전에이 를 사용하여 해당 루프에서 얻을 수 있습니다 ". index.php를 위해, 다시 처리를 떠나 지마"를 의미

RewriteRule ^index.php - [L]