2010-07-12 4 views
1

URL을 새로 작성하는 데 익숙하지 않고 알아낼 수없는 문제가 있습니다..htaccess : URL 재 작성 문제가 발생했습니다.

RewriteRule ([^/]+).php index.php?com=cat&catname=$1 [L] 
RewriteRule ([^/]+)/([^/]+).php index.php?com=detail&catname=$1prodname=$2 [L] 

하고이 같은 2 개 URL이 필요합니다 :

website.com/category-name.php 
website.com/category-name/product-name.php 

두 번째에 따라 첫 번째 조건 규칙이 ... 내가 의미하는 것으로 보인다 : 내가 전화하면

나는이 두 조건을 가지고 첫 번째 URL은 모두 정상적으로 작동하지만 두 번째 url을 호출하면 원하는 변수를 얻을 수 없습니다 ("com"은 항상 "cat"이고 "catname"은 $ 2 값을 얻습니다)

미리 감사드립니다!

답변

3

두 번째 규칙과 일치하는 URL도 첫 번째 규칙과 일치합니다. 첫 번째 규칙은 "L"로 표시되므로 두 번째 규칙이 적용되지 않습니다.

URL의 시작과 일치 시키려면 으로 정규 표현식을 시작하고 URL의 끝에 일치 시키려면 $으로 끝내야합니다. 재 작성 규칙은 URL 경로 (슬래시를 포함하여 website.com을 따르는 모든 것)에 적용됩니다.

예를 들어 (물론이 테스트하지 않았다) :

# Example: website.com/books.php -> website.com/index.php?com=cat&catname=books 
RewriteRule ^/([^/]+).php$ /index.php?com=cat&catname=$1 [L] 
# Example: website.com/books/java.php -> website.com/index.php?com=detail&catname=books&prodname=java 
RewriteRule ^/([^/]+)/([^/]+).php$ /index.php?com=detail&catname=$1prodname=$2 [L] 
+0

고맙습니다 AndiDog을! 나는 "L"표시를 제거하고 작동하는 것처럼 보입니다 ("catname"값을 제외하고 "prodname"만 반환합니다). 게다가 절대 URL과 일치하는 정규식이어야합니다 이해할 수 없다 ... – Luciano

+0

@ 루치아노 : 절대 URL의 사용을 보여주기위한 예제를 추가했습니다. 이 방법은 규칙이 명확합니다. * 첫 번째 * 또는 * 두 번째가 선택됩니다 (또는 없음). – AndiDog

+0

고맙습니다. 그것은 정말로 도움이되었다! – Luciano