문제

나는 몇 가지 지저분한 오래된 URL이 있습니다 ...

http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1

http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2

... 새롭고 깨끗한 형태로 리디렉션하고 싶습니다 ...

http://www.example.com/page.php/welcome

http://www.example.com/page.php/prices

간단한 리디렉션으로 한 페이지를 다른 페이지로 리디렉션 할 수 있다는 것을 알고 있습니다.

301 /bunch.of/unneeded/crap을 리디렉션합니다 http://www.example.com/page.php

그러나 소스 페이지는 변경되지 않으며 VARS 만 발생합니다. 이 get 변수의 값을 기반으로하는 방법을 알 수 없습니다. 아무도 pls를 도울 수 있습니까!? 나는 오래된 regexes에 상당히 편리하므로 필요한 경우 Mod-Lewrite를 사용할 수있는 팝을 가질 수 있지만 Vars를 다시 작성하기 위해 구문을 명확하지 않으며 성능 히트를 피하고 사용하는 것을 선호합니다. 클리너 리디렉션 지침. 방법이 있습니까? 그리고 누군가가 올바른 mod-lerewrite 구문 pls에 대해 나를 단서를 얻을 수 없다면?

건배,

알았다.

도움이 되었습니까?

해결책

URL 쿼리의 매개 변수는 임의 순서를 가질 수 있으므로 하나를 사용해야합니다. RewriteCond 지령 모든 매개 변수를 확인하거나 가능한 모든 순수화에 대해.

다음은 다음과 같은 예입니다 RewriteCond 각 매개 변수에 대한 지침 :

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=1(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/welcome? [L,R=301]

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=2(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/prices? [L,R=301]

그러나 보시다시피, 이것은 엉망이 될 수 있습니다.

따라서 더 나은 접근 방식은 a를 사용하는 것입니다 RewriteMap. 가장 쉬운 것은 일반 텍스트 파일입니다 열쇠 그리고 한 쌍:

1 welcome
2 prices

지도를 정의하려면 서버 또는 바이러스 호스트 구성에 다음 지침을 작성하십시오 (이 지침은 디렉토리 당 컨텍스트에서는 허용되지 않습니다).

RewriteMap examplemap txt:/path/to/file/map.txt

그런 다음 한 가지 규칙 만 필요합니다.

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=([0-9]+)(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/%{examplemap:%2}? [L,R=301]

다른 팁

@Jack Ross

RewriteCond %{QUERY_STRING} option=com_content&task=view&id=70&Itemid=82
RewriteRule ^index.php http://www.domain.com/business/banks/? [R=301,L]

? 사용자가 원점 페이지와 동일한 쿼리 문자열을 갖지 못하도록 사용자가 전송되는 URL을 방지합니다.

요약하면 사용할 수 있습니다 RedirectMatch 쿼리 문자열을 포함하여 전체 URL과 일치하는 Regex가 있습니다. 그러면 URL의 부분을 재 배열 할 수 있지만 "OpenDocument & Part = 1"과 "환영"(새 URL이 원래 URL과 완전히 다른 경우)과 같은 변환을 해야하는 경우 A가 필요할 수 있습니다. RewriteMap - 또는 더 나은 경우 모든 URL을 page.php PHP에서 쿼리 문자열을 구문 분석합니다.

편집하다: 리디렉션하려는 몇 가지 URL이라면 아마도 개별 규칙을 작성할 수 있습니다.

RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1 http://www.example.com/page.php/welcome
RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2 http://www.example.com/page.php/prices
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top