문제

500 페이지 이상의 대형 정적 웹 사이트를 Joomla 설치로 전송하고 있지만 500+ 라인을 코드하지 않고 원하는 것은 PHP의 내장 301 헤더 리디렉션을 사용하여 동적으로 리디렉션하는 요청을 사용하는 것입니다. 새로운 URL에.

예를 들어, 사이트를 이동 한 후 다음 URL은 리디렉션없이 404입니다.

http://www.foo.com/old_page.html

나는 그것이 리디렉션되기를 원합니다

http://www.foo.com/old-page.php

따라서 이전 URL 및 해당 새 URL의 MySQL 데이터베이스를 작성하고 서버가 404를 반환 할 경우 기존 이전 URL의 DB를 확인하고 일치하는 경우 A를 발행합니다. 301 새 URL로 리디렉션됩니다. 맞아, 내가 여기서 이해가 되나요?

어떻게할까요? PHP를 이해하는 동안 Apache와 어떻게 작동하는지 (또는 예를 들어 ...도 ...)를 이해하지 못하기 때문에 논리를 "이야기"할 수는 있지만 논리를 "대화"할 수는 있지만 시작해야 할 곳이나 어떻게 달성 해야하는지 확실하지 않습니다. ?

그리고 이미이 작업을 수행하는 스크립트를 알고 있다면 더 좋습니다.

도움이 되었습니까?

해결책

Apache 구성에서 원하는 /404handler.php 스크립트의 errordocument를 설정하십시오. 실행 맥락에서 $ _server [ 'request_uri' 요청 된 원본 페이지의 URI가 될 것입니다. 데이터베이스 조회를 수행하고 리디렉션하려는 페이지를 찾으면 사용하십시오. 헤더 ( "위치 :". $ Whoever) 그것으로 리디렉션합니다.

다른 팁

내가 생각할 수있는 가장 간단한 방법은 사용하는 것입니다. mod_rewrite (링크는 훌륭한 소개 자습서입니다) 모든 들어오는 요청을 단일 PHP 스크립트로 리디렉션합니다 (또는이 리디렉션이 요청이 존재하지 않는 파일에 대해서만 발생하도록 플래그를 사용하여 요청 된 주소가 일부로 전달 된 상태에서 발생합니다. 쿼리 문자열의. 거기에서 PHP 스크립트가 해당 요청이 어디로 가야하는지를 찾아서 리디렉션해야합니다.

누군가가 열려고한다면 http://www.foo.com/old_page.html, mod_rewrite는 같은 것으로 보낼 것입니다 http://www.foo.com/redirect.php?page=old_page.html. Redirect.php는 "Old_Page.html"의 새 주소가 무엇인지 확인하기 위해 데이터베이스 조회를 수행하고 거기로 리디렉션합니다.

데이터베이스를 작성하는 대신 이전 URL (예 : Old_Page.html)이있는 페이지에 리디렉션을 놓으십시오.

데이터베이스 항목과 함께 사례 별로이 작업을 수행하고 있으므로 페이지와 함께 사례별로 수행 할 수 있습니다.

빠른 Perl 스크립트 또는 이전 페이지 이름과 새 페이지의 URL을 제공 한이 HTML 페이지를 생성하려는 것을 작성할 수 있습니다.

당신은 또한 사용할 수 있습니다 RewriteMap:

old_page new-page
# …

그러나 해당 맵을 귀하의 httpd.conf (또는 virutal host 구성)에서 정의해야합니다.

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

그런 다음 .htaccess 파일에서 해당 맵을 사용할 수 있습니다.

RewriteCond ${oldtonew:$1} .+
RewriteRule ^(.*)\.html$ /%0.html [L,R=301]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top