2012-09-21 5 views
0

온라인 상점 (예)을위한 htaccess redirect 지시문을 작성했습니다.htaccess redirect - 하위 폴더를 매개 변수로 사용합니다.

제품은에 전달 된 ID 매개 변수, product.php에 표시됩니다.

내가 무엇을 목표로하고있어

products/someValue/someID

지도

product.php?param1=someValue&param2=someID

을하는 것입니다

여기까지 제가 지금까지 있습니다. 이것은 대부분 작동하지만 몇 가지는 내가 원하는 것만은 아닙니다. 기본적으로 슬래시로 products/ 이후의 모든 항목을 분리하고 몇 개 또는 몇 개에 관계없이 각 항목을 매개 변수로 사용해야합니다. 또한 후행 슬래시는 선택 사항입니다. 내 규칙에 포함되지 않은 경우 404가 throw됩니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

RewriteRule ^products/(.*)/(.*)/.*$ /product.php?param1=$1&param2=$2 
+0

URL이 현재로 리디렉션되는 모양은 무엇입니까? – Aust

+0

'products/1/2 /'에 접근하면'product.php? param1 = 1 & param2 = 2'로 해석됩니다. 이것은 훌륭하지만,'products/1/2/3 /'로 변경하면'product.php? param1 = 1/2 & param2 = 3'으로 이동합니다. 왜 정규식이 내가 잘하는 게 아닌지 알아낼 수 없어요. – jammypeach

답변

1

현재 정규식은 욕심이 있습니다. 한정 기호는 기본적으로 욕심이 있습니다. ?을 추가하면 그 내용이 유익하지 않게됩니다. 또는 당신은이 중 하나를 작동합니다 / 제외하고는 아무것도 일치하도록 정규식을 변경할 수 있습니다

RewriteRule ^products/(.*?)/(.*?)(/.*)?$ /product.php?param1=$1&param2=$2 
RewriteRule ^products/([^/]*)/([^/]*)(/.*)?$ /product.php?param1=$1&param2=$2 

Read up on greediness in regexes to understand this better.

+0

이 덕분에 완벽하게 트릭을 만들었습니다! 나는 내가 가까웠다는 것을 알았다. 링크도 훌륭합니다, 마침내 말이죠 :) 당신과 @ JonLin의 대답은 여러분 모두에게 트릭을합니다. – jammypeach

+0

@jammypeach - 여러분 환영합니다. :) 덧붙여서'/.*'를 정규식의 끝에서'(/.*)? '로 바꾸면 url에 후행'/'이 필요 없게됩니다. – Aust

+0

예, 한 번에 하나의 변경 사항을 적용하여 그걸 가지고 놀고 있습니다. 내가 정규식에 대해 잘 알고 있었으면 좋겠다. 다시 학습 모자를 쓸 시간이다. :) – jammypeach

1

이 아닌 욕심에 정규식을 변경해보십시오 :

RewriteRule ^products/(.*?)/(.*?)/.*$ /product.php?param1=$1&param2=$2 

나 :

RewriteRule ^products/([^/]+)/([^/]+)/.*$ /product.php?param1=$1&param2=$2