2015-01-26 2 views
0

내 목표는 특정 프로필을 요청하는 URL을 profile/name 양식으로 다시 작성하고 name을 포함하는 PHP 스크립트로 다시 작성하여이 사람 프로필을 추출합니다.HTACCESS 프로필 리디렉션 정규식 대체하지 않음

RewriteRule ^profile/([^/]+) profile/view.php?username=$1 [NC] 

문제는 내가 name 사용 상관없이, 그것은 항상 profile/view.php?username=view.php에 저를 리디렉션이다 :이를 위해 나는 다음 문을 사용합니다. 나는 절대적으로 아무 생각도하지 않고 모든 것을 무용지물로 시험해 보았습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까??

답변

2

다시 쓰기 엔진은 URI가 변경되지 않을 때까지 모든 규칙을 반복합니다. 따라서 view.php은 다음에 규칙을 반복 할 때 ([^/]+) 정규식과 일치합니다.

일부 조건을 추가하는 시도 :

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^profile/([^/]+) profile/view.php?username=$1 [L,NC] 

편집 : 설명

다시 쓰기 엔진 루프의 비트, 그래서 종류의 변수로 요청 URI를 고려한다. 그리고이 변수는 다시 쓰기 규칙의 정규식과 일치합니다.

규칙이 간단 그래서 경우 :

RewriteRule ^profile/([^/]+) profile/view.php?username=$1 [NC] 

이 재 작성 엔진이해야 할 것입니다 것입니다 :

  1. URI URI를 = /profile/myname
  2. 합니까 ^profile/([^/]+) 일치? 예
  3. 그룹화는 "myname"과 일치하며 규칙의 대상에 의해 역 참조됩니다.
  4. URI = /profile/view.php?username=myname
  5. 재 작성 엔진은
  6. 는 정규식 일치 /profile/view.php합니까 루프? (쿼리 문자열은 다시 쓰기 규칙에서 일치하는 항목의 일부가 아닙니다) 예
  7. 그룹화는 "view.php"와 일치하며 규칙의 대상에 의한 역 참조입니다.
  8. URI = /profile/view.php?username=view.php
  9. 재 작성 엔진은 URI를 제외하고 발생
  10. 같은 일이 더 이상 변경 루프 없기 때문에 재 작성 엔진은

최종 URI를 중지 : /profile/view.php?username=view.php

+0

대단히 감사합니다! 그것은 트릭을했다. 아직도 완전히 이해하지는 못합니다. – Confiqure

+0

@Confiqure 약간의 설명을 추가했습니다. –