2009-06-25 3 views
0

나는 mod_rewrite를 사용에 새로운 오전 내 사이트의 기본 레벨에서 페이지를 다시 작성하는 것을 시도하고있다 :간단한 mod_rewrite를 문제

www.site.com

내가 다음 URL www가 중 하나를 다시 작성합니다. site.com/main www.site.com/settings www.site.com/username

받는 사람 : www.site.com/index.php?v=main www.site.com/index.php?v= 설정 www.site.com/index.php?v=username

mod_rewrite를 www.site.com/directory/에서 설정할 때이 기능을 사용할 수 있었지만 할 수 없었습니다. 그것은 당신이 여분의 "/"가 있습니다 www.site.com

RewriteEngine On 
RewriteRule ^/([^/\.]+)/?$ index.php?v=$1 [L] 

답변

0

와 함께 작동하는 방법을 알아낼.

RewriteEngine On 
RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L] 
+0

문자 클래스 선언 내에서 점을 이스케이프 할 필요가 없습니다. – Gumbo

1

올바른 규칙이 될 것 ...

RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA] 

하지만 당신은 몇 가지 문제를 공격 할 수 - 당신이 진짜 디렉토리가있는 경우 - 예를 들어,이도를 재 작성하고 당신을 방지 : 그것은해야한다 그들을 사용하여. 당신은 문제를 방지하기 위해 두 가지 옵션이 있습니다, 당신은 다음과 같이 여러 규칙을 작성할 수 있습니다

RewriteRule ^Directory/?$ index.php?v=directory [L,NC,QSA] 

또는이 같은 ... A는 "디렉토리를 척"사용할 수있는 두 번째 예에서

RewriteRule ^Content/([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA] 

, 귀하의 URL은 www.site.com/Content/Directory/입니다.

NC 및 QSA를 내 속성에 추가했습니다. - 사례 없음 및 검색어 문자열 추가. 확실히 NC를 사용해야하며 QSA는 일부 구현에서 유용합니다. 나는 경로가 /settings 또는 /settings/ 등등 (현재 모두 일치) 및 수 있는지 여부에 정착 할

0

는 (개인적으로, 나는 /settings을 선호합니다.) 나는 그것이 가능한 비 ambigous로 경로를 확인하는 것이 좋습니다 있다고 생각합니다. 당신이 /settings 같은 경로를 일치한다면, 당신은 다음과 같이 할 것이다 : 추가 쿼리 매개 변수를 지원하려면

RewriteEngine On 
RewriteRule ^(\w+)$ index.php?v=$1 [L] 

는 또한 QSA 플래그를 보라 (예를 들면 다음과 같습니다. /settings?tab=passwordindex.php?v=settings&tab=password에) 난 그것이 처음부터 나를 귀찮게했기 때문에 그것을 언급했다.