2011-10-27 2 views
1

나는 숫자와 다음 하이픈을 mod_rewrite에 사용하여 제거하고자하는 다음정규 표현식 - 마이너스/하이픈 문자 문제

/4-new-south-wales/499-some-category.html 

포함 된 URL이 있습니다.

은 내가

/4-new-south-wales-nsw/49cross-breeds-designer-dogs.html 

이 어떤 수준에서 중첩 될 수 있습니다 다음 나에게주는 다음과 같은 규칙

RewriteRule (.*)\d+-(.*) $1$2 [R=301,L] 

있습니다. 예를 들어

/a/b/c/4-new-south-wales-nsw/49123123-cross-breeds-designer-dogs.html 

나는 당신의 도움을

/a/b/c/new-south-wales-nsw/cross-breeds-designer-dogs.html 

감사로 끝날 싶습니다.

+0

여기서 질문은 어디에 있습니까? rewite 규칙이 필요한 것을 정확하게 알려주십시오. –

+0

안녕하세요, "mod_rewrite 숫자 및 다음 하이픈을 사용하여 제거하려면"다시 쓰기 규칙을 싶습니다 – Phil

+0

정확히 결과가 있어야합니까? '/ new-south-wales-nsw/cross-breeds-designer-dogs.html'? 그래서 1 명 또는 2 명? 더 있을까요? – morja

답변

0

는 다음을 시도해보십시오

RewriteRule (.*?)\d+-(.*?)\d+-(.*) $1$2$3 [R=301,L] 

?는 패턴 ungreedy한다.

참조 및 URL 경로 내에서 /ddd-XXX 패턴의 여러 임의로 배치 발생을 교체하려면 rubular

+0

감사합니다 morja - URL 중 일부는 숫자 조합 하나만 가지고있는 반면 일부 URL은 조합이 두 개인 경우도 있습니다. 나는 일하는 RewriteRule (. *?) \ d + - (. *) $ 1 $ 2 [R = 301, L]을 사용했다. 그래서 나는 첫 번째 그룹에 대한 불합리함이 필요했다. – Phil

1
(/.*/)\d+-(.*) 

이 문제가 해결됩니까?

. *는 욕심이 많으므로 첫 번째 숫자도 일치하므로 \ d +와 일치하는 마지막 숫자 만 남기 때문에 첫 번째 캡처 그룹은 다음과 같이 끝납니다. /4-new-south -wales/49

+0

안녕하세요 Pcaclcao, 나는 당신의 정규식을 테스트했고 결과가/a/b/c를 내 게시물 편집에서 제거 할 수 있도록 중첩 된 레벨을 제거했습니다. – Phil

+0

나는 이것을 테스트하기 위해 아파치를 설정하지 않았지만, 정규 텍스트 편집기를 사용하여/a/b/c/4-new-south-wales-nsw/49123123-cross-breeds- designer-dogs.html이 나에게 준다 : /a/b/c/4-new-south-wales-nsw/cross-breeds-designer-dogs.html 이것이 필요한 것이 아닌가요? – pcalcao

+0

미안 내가 분명하지 않은. 숫자와 꼬리표 하이픈을 제거하고 싶습니다. 예. 제공된 URL에서 4 및 499를 제거하십시오. 나는 동일한 솔루션을 .htaccess에 적용 할 때 작동하는 정규식 편집기에서 내 솔루션을 테스트했지만 위의 하이픈과 숫자 숫자 하나가 사라지는 문제를 해결합니다. – Phil

0

에 대한 테스트, 아파치는 한 번에 각 발생을 대체하고 각 교체 후 반복적으로 URL을 리디렉션해야합니다. 그러나 올바르게 수행하려면 .htaccess 파일에 RewriteBase 문을 추가하고 .htaccess 파일이 포함 된 경로로 설정해야합니다. 여기

당신이 찾고있는 것을 수행하는 테스트 된 .htaccess 파일이 .htaccess 파일 (필자는 RewriteBase에 설정 한 내용 임) /apache 디렉토리에있는, 내 테스트 시스템에서

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Set RewriteBase to the URL-path containing this .htaccess file: 
    RewriteBase /apache 

    # Redirect first "/ddd-XXX" path segment to: "/XXX": 
    RewriteRule ^((?:(?!\d+-)[^/]+/)*)\d+-(.*)$ $1$2 [R=301,L] 

    # Rewrite the resulting URL path to show.php as a query string 
    # (if resulting URL-path is NOT a real file or a directory). 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+)$ show.php?path=$1 

</IfModule> 

. 마지막으로 리디렉션 된 URL 경로가 실제 파일이 아닐 수 있습니다! 위의 .htaccess 파일에서 실제 파일을 가리 키지 않는 최종 리디렉션 된 URL을 처리하는 추가 규칙이 있으며 show.php 스크립트에이 경로를 쿼리 변수로 전달합니다.