2011-01-24 2 views
1

예를 들어 URL이 있습니다. www.example.com/user.php?user_id=9 여기서 user_id 필드는 user 테이블의 pk 중 하나에 매핑됩니다. 나는 URL이 이것을 원하지 않는다. 대신에 www.example.com/user/Aditya-Shukla.i와 같은 url을 원한다. apache 2를 사용하고 있고 mod-rewrite 모듈에 rewriting 규칙 집합이 있다는 것을 이해한다. URL 별칭을 만드는 데 사용할 수 있습니다.Mod_rewrite 및 MyXql

내 질문은 내가 양식 www.example.com/user.php?user_id=9의 모든 HREF이

입니다. 그래서 URL을 변경하려면 모든 href를 www.example.com/user/Aditya-Shukla로 변경하고 규칙을 다시 작성하여 레코드를 얻기 위해 쿼리를 수행해야한다고 생각하십니까?

더 나은 솔루션이 있습니까?

답변

1

아니요, mod_rewrite에는 다시 쓰기 규칙 집합이 없습니다. 오히려 추가 조건과 결합 할 수있는 정규 표현 패턴을 기반으로 규칙을 작성하는 지시문을 제공합니다.

RewriteEngine on 
RewriteRule ^/user/([^/]+)$ /user.php?name=$1 

: 당신이 좋아, /user/로 시작하고 다음 다른 경로 세그먼트를 가지고 있으며, 여러분의 user.php에 내부적으로 재 작성 요청 된 URL의 경로를 사용하는 규칙을 만들 것입니다 귀하의 경우에는

첫 번째 지시문 RewriteEngine on은 mod_rewrite를 활성화하는 것입니다. 그리고 두 번째 지시문 RewriteRule …은 위에 설명 된 규칙입니다. ^/user/([^/]+)$/user/ (즉, ^/user/)으로 시작하고 그 뒤에 하나의 경로 세그먼트 (즉, ([^/]+)$)가 오는 모든 URL 경로와 일치하는 패턴입니다. 이 요청은 내부적으로 /user.php으로 다시 쓰여지고 /user/ 뒤에있는 일치하는 경로 세그먼트는 매개 변수 값 매개 변수 ( $1(…)으로 표시된 첫 번째 그룹의 일치 값에 대한 참조 임)의 매개 변수 값으로 사용됩니다.

이렇게하면 /user/Aditya-Shukla의 요청이 내부적으로 /user.php?name=Aditya-Shukla으로 다시 작성됩니다. 그러면 해당 사용자 이름을 사용하여 테이블에서 찾을 수 있습니다.

1

user/Aditya-Shuklauser.php?user_name=Aditya-Shukla으로 다시 쓰고 나머지는 코드에서 처리 할 수있는 RewriteRule을 추가 할 수 있습니다.

RewriteEngine On 
RewriteRule ^user/(.*)$ user.php?user_name=$1 

아니면 자신의 사이트 내에서 항상 URL의 표준 형태, 즉를 만들 것이라고 가정 user.php?user_id=9

1

에 직접 user/Aditya-Shukla를 다시 할 수 있도록 사용자 이름을 참조하기위한 RewriteMap 지시어를 사용 :

:
/user/Aditya-Shukla 

은 ... 그리고 당신은 같은 정규의 형식에없는 외부 링크, 즉 "이전 링크"를 다루는 데

www.example.com/user.php?user_id=9 

mod_rewrite는이 상황에서 재 매핑에 적합하지 않을 수 있습니다. 나는 당신이 매우 많은 사용자를 가질 것으로 추정하고 있으며 그 수가 증가 할 수도 있습니다. mod_rewrite는 RewriteMap 지시어를 가지고 있습니다. 네, 동적으로 맵을 생성 할 수있는 방법이 있습니다. 그러나 좋은 디자인이 될 것이라고 생각하지 않습니다. 재 작성 규칙이 매번 일치 할 때마다 동적으로 userId-to-userName의 맵을 동적으로 생성합니다. .)

대신 user.php 코드를 작성하여 올바른 userName을 조회하고 원하는 URL의 표준 형식을 조합 한 다음 클라이언트로 다시 리디렉션을 보내야합니다. 뭔가 같은 :

Header("HTTP/1.1 301 Moved Permanently"); 
Header("Location: http://www.example.com/user/Aditya-Shukla"); 

당신은 아마이 그것은 "이전 스타일 발생하면 제대로 검색 봇 색인 귀하의 사이트를 도움이 될 것"영구 "URL 변화하고 있다는 것을 나타냅니다 (대신 302) 301 리디렉션을 사용한다 "거기 밖으로 URL.

-broc

+0

그래서 내가 –

+0

내 주요 문제는 사이트에있는 링크를 해결하기 위해 세 가지 옵션이 여기에있다 그래서 내가 user.php지도를 가정 해 봅시다? 사용자/아 디트 - Shukla 나누었다에 = 9 내가 페이지가 사용자 ID 사람들이 사용자 목록을 볼 수있는 곳에서 href = ""는 여전히 user.php? user = 9가됩니다. 이 문제를 어떻게 해결할 수 있습니까? –

+0

사용자를 나열하는이 페이지를 제어하지 않는다는 뜻입니까? 페이지를 제어하고 href 내용을 생성하는 경우 페이지를 렌더링 할 때 "멋진"URL을 제공 할 수 있습니다. 이 페이지를 제어하지 않는다면 리디렉션을 사용하여 user.php를 구현해야합니다. –