WordPress의 404 처리를 건너 뛰고 정적 파일의 404 오류를 모두 404.html로 리디렉션하는 방법은 무엇입니까?


17

WordPress의 404 처리를 건너 뛰고 정적 파일의 404 오류를 모두 404.html로 리디렉션하는 방법은 무엇입니까?

나는 읽고 permalinks를 사용할 때 불가능한 것 같습니까?

목적은 PHP를로드하지 않음으로써 404 오류에 대한 서버로드를 줄이는 것입니다.

답변:


8

.htaccess 정적 파일에 대한 WordPress 404 오류 처리를 건너 뜁니다 .

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !(robots\.txt|sitemap\.xml(\.gz)?)
        RewriteCond %{REQUEST_FILENAME} \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ [NC]
        RewriteRule .* - [L]
    </IfModule>

참고 : 이 규칙은 W3 Total Cache 플러그인 *에 의해 생성되었습니다.

Nginx는 정적 파일에 대한 WordPress 404 처리를 건너 뜁니다.

if (-f $request_filename) {
    break;
}
if (-d $request_filename) {
    break;
}
if ($request_uri ~ "(robots\.txt|sitemap\.xml(\.gz)?)") {
    break;
}
if ($request_uri ~* \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$) {
    return 404;
}

1

Chris_O가 말한 것을 확장하려면 ... W3 Total Cache를 설치하고 해당 플러그인의 설정을 사용하여 정적 파일을 캐시하지 않습니다. 플러그인 자체는 매우 유용하며 특히 최신 업데이트로 사이트 속도를 높여야합니다.

또한 정적 파일, 403 (금지) 등에 대해 404를 처리하는 방법을 보려면 Wordpress에서 오류 404 페이지 만들기 를 참조하십시오.


1

아마도 간단한 해결책 일 것입니다. 조건부 태그를 사용하고 is_404()정적 파일로의 리디렉션을 작성하십시오. 파일 header.php이나 index.php테마에 코드를 포함 시키십시오 .

여기 예가 있습니다.

   if ( is_404() ) {
      wp_redirect( 'static.htm' );
      exit;
   }

연결


2
의사 결정은 여전히 ​​htaccess 레벨이 아닌 PHP에서 수행됩니다. 목적은 404 오류에 대해 PHP 로딩을 건너 뛰는 것입니다.
freethinker

2
@freethinker : php를 통해서만; htaccess를 통한 방법이 더 빠르지 만 WordPress에서 처리가 쉽지 않을 수도 있습니다.
bueltge

@kaiser 죄송합니다, 질문을 업데이트
freethinker

0

이것이 가능한지 확실하지 않습니다. 퍼머 링크를 활성화 할 때 WordPress에서 생성 한 htaccess 코드를 보면 기본적으로 "파일 / 디렉토리를 찾을 수 없으면 index.php로 보내십시오."라고 표시됩니다. 여기에는 모든 실제 404 요청이 포함됩니다. WordPress에서 알고있는 동적으로 생성 된 모든 공용 리소스의 목록을 만들고이를 .htaccess에 직접 삽입하는 것 외에, 404를 처리하려면 PHP를로드해야합니다.


0

Chris_O 의 아이디어가 마음에 들었지만 더 안전한 내 자신의 버전을 만들었습니다.

그래서 내가 한 일은 예외에 폴더를 추가했기 때문에 귀하의 요청이 해당 라인에서 시작되면 확실히 유효한 영구 링크가 아닙니다. 대부분의 요청은 해당 폴더의 내용을 악용하려는 봇으로부터 발생합니다. 효과적으로 필터링되며 필요한 경우 작은 정적 404 페이지를 표시 할 수 있습니다.

다른 요청은 여전히 ​​워드 프레스에 의해 처리되며 누군가 잘못된 주소를 입력하면 템플릿 내에서 사용자에게 알맞지 않은 메시지를 표시합니다. Chris_O 의 솔루션은 파일 확장자처럼 보이는 요청에 대해서만 작동합니다. 그렇지 않으면 워드 프레스에서도 처리됩니다.

더 안정적으로 만들기 위해 원시 액세스 파일을 검색하고 404 오류를 검색 할 수 있습니다. 특정 줄로 시작하는 많은 요청을 발견 한 경우이 요청을이 필터에 포함 할 수도 있습니다.

#adding your own handler
ErrorDocument 404 /404/index.html

<IfModule mod_rewrite.c>
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(404|cgi-bin|wp-admin|wp-content|wp-includes)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

0

내 사이트에 여러 CMS가 설치되어 있으므로 이와 같은 것을 사용하여 모든 CMS에 대해 동일한 404 오류 페이지를 사용합니다. Nginx + FastCgi 에이 conf를 사용하고 정상적으로 작동합니다.

server {
    ...
    error_page 404 /404.html; #enable custom 404 error page
    location ~ /\.ht {
        deny all; #disable access to htaccess
    }
    location ~ [^/]\.php(/|$) {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on; #disable PHP 404 error intercept
    }
    location /wordpress/ {
        try_files $uri $uri/ /wordpress/index.php?$args;
    }
}

나는이 설정을 php.ini에서 이것과 함께 사용합니다 :

cgi.fix_pathinfo = 1 

워드 프레스는 http://example.com/wordpress/ 와 같이 설치됩니다 . 404.html은 http://example.com/ 의 루트에 있습니다.

추신 : 변경 사항을 적용하려면 php.ini 또는 nginx.conf 파일을 변경 한 후 PHP 및 Nginx 서비스를 다시 시작해야합니다.


-3

이것을하는 3 가지 방법이 있습니다

  1. 404.php 코드를 변경함으로써.
  2. 워드 프레스 플러그인 사용
  3. .htaccess 파일을 편집하여.

완전한 자습서-(링크가 끊어지고 스팸으로 리디렉션 됨)


안녕하세요 Mazhar, 귀하의 사이트에 대한 링크가 아닌 완전한 답변을 게시 할 수 있습니까? 그 링크가 죽으면이 대답은 거의 쓸모가 없습니다! 건배!
Stephen Harris

이 페이지는 404를 제공합니다. 아니면 뭔가 말하려고합니까?
Michiel van der Blonk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.