2014-03-03 2 views
0

제품 이미지 URL이 있습니다 : 예. www.example.com/product_images/12345/large.jpgReg 예 왼쪽에 0으로 채우기

이제 'ext3 서버'로 인해 폴더 한도 당 32,000 개의 파일이 생겨서 32,000 개의 제품에 매우 가깝습니다. 서버를 변경할 수 없습니다. 나는 자체가 그래서 나는 다음과 같은 생산하는 AliasMatch 중 하나에서 사용할 수있는 등록의 예를 만들기 위해 찾고 있었다 변경할 수있는 URL을 원하지 않는

...

www.example.com/product_images/1 /large.jpg => www.example.com/new_product_images/0000/0001/large.jpg

www.example.com/product_images/123456/large.jpg => www.example .com/new_product_images/0012/3456/large.jpg

나는 앞에 0이 붙은 8 자로 숫자를 채우고, 그 다음 반으로 자른다. 그러나 나의 reg ex 기술은 그렇게 크지 않다. .. 나는 패딩에 꼭 끼이고있다.

감사합니다!

존. 당신이 정말로 패딩을 원하는 경우

답변

0

, 당신은 다양한 길이

RewriteRule ^/product_images/(.{1})(.{4})/(.*)$ new_product_images/000$1/$2/$3 
RewriteRule ^/product_images/(.{2})(.{4})/(.*)$ new_product_images/00$1/$2/$3 
RewriteRule ^/product_images/(.{3})(.{4})/(.*)$ new_product_images/0$1/$2/$3 
RewriteRule ^/product_images/(.{4})(.{4})/(.*)$ new_product_images/$1/$2/$3 

또는 일치하는 여러 규칙이 할 수있는, 당신의 폴더가 1 또는 2 또는 3 자 (패딩)하고 1 개 규칙을 사용하여이 모두.

RewriteRule ^/product_images/(.+)(.{4})/(.*)$ new_product_images/$1/$2/$3 

이지도 것

  • 12345 ->/2천3백45분의 1
  • 123456 ->/
  • 3,456분의 1,234,567 (12) ->// 4567 (123)
  • 12345678 ->/1234/5678

이것은 폴더를 순서대로 유지하지 않지만보다 간단한 규칙입니다.

고정 길이 접두사를 사용할 수도 있습니다. 예를 들어, 한 자리로 시작하는 모든 항목은 다른 폴더에 있습니다. 여기 매핑 할 2 자리

와 예이다

  • 123 ->/3분의 12
  • 12345 ->/3백45분의 12
  • 123456 -/3456
  • 234,567>/12 -/4567
  • 2345678>/23 -이 사용>/45,678분의 23

는,이 개 문자는 문제의 B 인하 y는 100의 계수입니다.

유일한 문제는 100 미만의 ID입니다. 한 가지 해결 방법은 기존 폴더 (product_images)에 해당 항목을 남겨두고 RewriteRule을 ID 100+에만 적용하는 것입니다.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/product_images/(..)(.+)/(.*)$ new_product_images/$1/$2/$3 
+0

이미지가 100보다 작 으면 정규식과 일치하지 않으므로 잔인합니다 – AaronM

+0

당신은 스타입니다. 그게 빛나는 것처럼 보입니다. 나는 오늘 그것에게 줄 것이다. 고마워요! – user3352141

관련 문제