2009-04-14 4 views
1

500 + 페이지의 대규모 정적 웹 사이트를 Joomla 설치로 전송할 예정입니다. 500 행 + .htaccess 파일을 코딩하는 대신, 내가하고 싶은 일은 PHP의 내장 새 URL에 들어오는 요청을 동적으로 리디렉션하는 301 헤더 리디렉션 내가 사이트를 이동 한 후 그래서 내가 좋아하는 것302 PHP와 MySQL을 사용하여 404에 리디렉션

그래서 예를 들어, 내가 원하는 것 redirect-

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

없이 다음 URL 것 (404)는

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

로 리디렉션 이전 URL 및 해당 새 URL의 MySQL 데이터베이스를 작성한 다음 서버가 404를 리턴하면 먼저 기존의 기존 URL에 대한 DB를 확인하고 일치하는 경우 301로 리다이렉트를 발행하십시오. 새 URL. 맞아, 내가 여기서 이해할 수 있니?

어떻게하면됩니까? 나는 논리를 "말하지만"어디서 시작해야하는지, 또는 PHP를 이해하는 동안 Apache가 어떻게 작동 하는지를 이해하지 못하기 때문에 어디서 시작해야하는지, 어떻게해야하는지 잘 모르겠습니다 (예를 들어 ...) ?

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

답변

5

Apache 구성에서 원하는 /404handler.php 스크립트의 ErrorDocument를 설정하십시오. 실행 컨텍스트에서 $ _SERVER [ 'REQUEST_URI']은 요청한 원본 페이지의 URI가됩니다. 데이터베이스 조회를 수행하고 리디렉션 할 페이지를 찾으면 헤더 ("Location :". $ wherever)을 사용하여 리디렉션하십시오.

0

데이터베이스를 만드는 대신 이전 URL (예 : old_page.html)이있는 페이지로 리디렉션을 삽입하는 것이 가장 좋은 이유는 무엇입니까?

분명히 데이터베이스 항목을 사용하여 사례별로이 작업을 수행하고 있기 때문에 페이지별로 사안별로 처리 할 수 ​​있습니다.

이전 페이지의 이름과 새 페이지의 URL이 주어지면이 perl 스크립트를 작성하거나이 html 페이지를 생성하고자하는 모든 것을 작성할 수 있습니다.

1

내가 생각할 수있는 가장 간단한 방법은 들어오는 모든 요청을 단일 PHP 스크립트로 리디렉션하기 위해 mod_rewrite을 사용하는 것입니다 (또는이 리디렉션이 요청이 발생할 경우에만 발생하는 플래그를 사용하십시오) 존재하지 않는 파일에 대한 것입니다.) 요청 된 주소가 쿼리 문자열의 일부로 전달됩니다. 거기에서 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"에 대한 새 주소를 확인하고 거기로 리디렉션합니다.

old_page new-page 
# … 

하지만 당신을 httpd.conf (또는 virutal 호스트 구성)에 그 맵을 정의해야합니다 :

0

또한 RewriteMap 사용할 수

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

그런 다음 것을 사용할 수 있습니다 너의지도.htaccess 파일 :

RewriteCond ${oldtonew:$1} .+ 
RewriteRule ^(.*)\.html$ /%0.html [L,R=301] 
관련 문제