2009-08-11 3 views
17

과 같은 GET 매개 변수를 사용하면 Apache Redirect 301이 실패합니다. 고객을 위해 새로운 PHP 사이트를 구축했으며 이전 사이트 구조의 최상위 Google 결과를 새 사이트로 리디렉션하려고합니다.예 :? blah =

나는 수십 개의 리디렉션 301을 documentroot의 .htaccess에 넣었습니다. 일부 작업은 정상적으로 작동하지만 일부는 여러 가지 문제가 있습니다.

이 잘 작동이 작동하지 않는

Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152 

!

Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html 
Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html 

리디렉션 htaccess로 파일에 혼합하고, GET 매개 변수 만 리디렉션이 실패 나타납니다 (리디렉션 단순히 생략되어 있기 때문에 404에 이르는).

해결 방법이 있습니까? 실패한 리디렉션을 무시하는 것은 고객에게 옵션이 아닙니다. 당신의 생각에 감사드립니다.

답변

15

Gumbo's answer's 추론이 정확 동안, 나는 그의 RewriteRule의 작동시킬 수 없습니다.

다른 RewriteCond를 추가하면됩니다. 다음 테스트를 거쳤으며 정상적으로 작동합니다.

RewriteCond %{REQUEST_URI} /nl/index.php$ 
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
+2

'RewriteRule'의 실제 패턴은 서버 구성이나 .htaccess 파일 및 .htaccess 파일의 위치에 따라 달라집니다. – Gumbo

12

Redirect 만 URL 경로에서 작동 않습니다

오래된 URL 경로는 슬래시로 시작하는 대소 문자 구분 (%로 인코딩 된) 경로입니다. [...]

그래서 URL 쿼리 (첫 번째 ? 이후의 부분)는 이후에 #까지 확인되지 않습니다.

하지만 그렇게 mod_rewrite를 사용할 수 있습니다

RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
RewriteCond %{QUERY_STRING} ^mID=24512&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/support/koppeling-met-omgeving.html [L,R=301] 
12
모두 검보의와 마티의 답변 동의

:하지만 ...

RewriteCond %{REQUEST_URI} ^/nl/index.php$ 
: 마티의에서

오타, "^"는 REQUEST_URI 조건에 대한 정규 표현식을 시작하는이 있어야한다

나 역시 .htaccess 파일이있는 곳에서 Gumbo가 아닌 Martijn을 만날 수있었습니다.

또한 매개 변수 문자열을 다시 쓰기와 함께 전달하지 않으려면 "?" URL의 끝에 : 마티의 코드를 다음 그렇지 않으면

RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301] 

, 그것은 당신의 URL이 /nl/index.php?mID=24511 &이 "읽고 하위 ID 다음 301 영구 리디렉션으로 http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0로 리디렉션 = 0 헤더에서이 URL에 대해 더 많은 규칙을 처리하지 마십시오. "

이것은 원하는 것일 수도 있고 아닐 수도 있습니다. 매개 변수가 이해되지 않으면 일반적으로 무시되어 무시됩니다. 그것은 아마 중요하지 않을 것이다.그러나 인간을 새 페이지로 리디렉션하고 "예쁜 URL"을 원할 경우 매개 변수 문자열을 제거하는 것이 바람직하므로 "?" 도착 URL의 끝에

+0

좋은 지적 방법은 기본 GET 문자열 매개 변수를 "?" 끝에 서명 ... 그걸 찾고 있었어. –

+1

? 의견은이 게시물에 큰 도움이됩니다. –