2012-06-03 4 views
3

URL 수가 많은 쿼리 문자열이 많은 플랫 파일 구조가있는 기존 사이트가있었습니다. 내 문제는 내가 CMS를 썼다 및 설정을 같은 쿼리 문자열을 사용하는 사용자 지정 오류 코드 페이지가 있습니다 : (404) /error.php?errorcode=404쿼리 문자열에 htaccess 문제가 발생했습니다.

이것에 문제가있는 경우입니다

에서 ErrorDocument를 이전 깨진 URL에 쿼리 문자열이 있습니다. 그러면 errordocument redirct에있는 쿼리 문자열을 덮어 씁니다. 예를 들면 다음과 같습니다.

www.example.com/missingpage.php - 문제없이 404로 리디렉션됩니다.

하지만 당신은

www.example.com/missingpage.php?anything=anything

또는

www.example.com/missingpage을 할 경우 .php?

errorcode = 404 쿼리 문자열은 PHP 페이지를 만들지 않으며 오류 코드가 일치하지 않을 때 설정 한 일반 메시지를 throw합니다. 문제는 모든 종류의 미친 쿼리 문자열에 많은 링크가 있기 때문에 개별적으로 필터링하는 것이 매우 어렵다는 것입니다.

이전에이 문제가 발생 했습니까?

답변

0

간단한 해결책으로 특정 404.PHP 페이지를 만드십시오. 이 모든 사용자 정의 오류 페이지에 대한 전체 디렉토리가 프로젝트에 있습니다.

+0

필자는 CMS의 기존 코드 기반을 사용하여 코드 편집을 원했기 때문에이 문제를 피하려고했습니다. 분명히 각 개별 오류 페이지에서 DB를 읽고 해당 레코드를 편집 할 수있는 컨트롤을 만들 수 있지만 더 많은 페이지와 코드가 있습니다. 코드 유지 관리가 늘어남에 따라 파일을 최소화하려고합니다. 희망을 갖고 누군가가이 문제에 뛰어 들어 이걸 보게 될 것입니다. 그래도 고마워. –

0

100 % 이상적인 것은 아니지만 다른 옵션을 발견했습니다. 오류 문서 정의에서 전체 URL을 사용하는 경우 리다이렉션을 수행하고 원본 URL 쿼리 문자열을 무시합니다. 예를 들어 당신이 할 경우 :

ErrorDocument를 /error.php?error=404

페이지에 액세스하는 데 사용되는 사용자가 주소 표시 줄로 유지되고 쿼리 문자열이 될 것이라고 나쁜 URL 검색 주소창에있는 내용으로 덮어 씁니다. 하지만 당신은 ErrorDocument를 http://www.google.com/error.php?error=404

그런 다음 리디렉션이 발생 할 경우로 원래 "나쁜"오류 문서로 교체됩니다 사용하는 사용자를 URL입니다.

여기주의해야 할 사항이 있습니다. 이것은 소프트 404 오류로 검색 엔진이 귀하의 용기를 싫어할 수 있습니다.

3

다른 방법으로는 mod_rewrite를 사용하고 쿼리 문자열을 추가하는 것입니다. ErrorDocument 대상이 URL 매핑 엔진 (적어도 아파치 2.4 이상)을 통해 다시 가져 오기 때문에 다른 설정에서이 작업이 수행 된 것을 보았습니다.예를 들어

:

RewriteEngine On 
RewriteRule ^error-doc-([0-9]{3})$ /error.php?errorcode=$1 [L] 

이 방법, 주소 표시 줄에 URL이 변경되지 않습니다

ErrorDocument 404 /error-doc-404 
ErrorDocument 405 /error-doc-405 
ErrorDocument 500 /error-doc-500 

그리고는 당신이 있습니다.

관련 문제