Rediriger la page restreinte vers 404
-
-
Si vous refusez l'accès à un utilisateurpour unepage quiexiste,404est lemauvais code d'erreur à utiliser.Un 401 ou 403 auraitplus de sens.If you are denying access to a user for a page which exists, 404 is the wrong error code to use. A 401 or 403 would make more sense.
- 0
- 2013-07-12
- moopet
-
Vous avez raison.J'avais l'impression du client qu'ilne voulaitpas que quiconque sans accès sachemême que lapageexistait,lancer un 401 dirait qu'ilexistemaisinterdit.Néanmoins,ce serait un changementfacile de lancer un 401 à laplace.You are right. I was under the impression from the client that he did not want anyone without access to even know the page existed, throwing a 401 would say it exists but prohibited. Nonetheless, it would be an easy change to throw a 401 instead.
- 1
- 2013-07-12
- Evan Yeung
-
4 réponses
- votes
-
- 2011-08-28
J'aipu afficher uneerreur 404en utilisant le code suivant dansmonen-tête.
<?php global $wp_query; $wp_query->set_404(); status_header( 404 ); get_template_part( 404 ); exit(); ?>
Pour le décomposer:
$wp_query->set_404()
:indique à wp_query qu'il s'agit d'un 404,cela change letitre
status_header()
:envoie unen-tête HTTP 404
get_template_part()
: affiche lemodèle 404I was able to display a 404 error by using the following code in my header.
<?php global $wp_query; $wp_query->set_404(); status_header( 404 ); get_template_part( 404 ); exit(); ?>
To break it down:
$wp_query->set_404()
: tells the wp_query this is a 404, this changes the title
status_header()
: sends a HTTP 404 header
get_template_part()
: displays the 404 template-
C'est unebonne réponse,maisj'utiliserais aussi `http_status_code (404);` avant de définir lemodèlepourm'assurer que l'en-têteest correct (ce quiestnettement plus rapide que lafonction wordpress `status_header (404);`).Si vous êtespréoccupépar le classement despages,vous devez égalementmettre une règle «Interdire» dans votrefichier robots.txtpourindiquer qu'ilne s'agitpas d'une ressourcepublique.This is a good answer, but I would also use `http_status_code(404);` prior to setting the template to insure that the header is correct (which is significantly faster than the wordpress `status_header( 404 );` function). If you are concerned with page rank, you should also put a `Disallow` rule in your robots.txt to indicate that it is not a public resource.
- 0
- 2018-03-15
- mopsyd
-
- 2011-08-04
Pourquoine créez-vouspas unepage qui affiche unmessage d'erreur,puisne redirigezpas l'utilisateur vers cettepage?Voici unmoyen simple d'yparvenir:
Ouvrez lefichier
404.php
et ajoutez ces lignesen haut de celui-ci:/** * Template Name: 404 Page */
Créez unepage avec lemodèle
404 Page
.Puis redirigez les utilisateurs:if ( !current_user_can('administrator') ) { $404_page = get_permalink( $404_page_id ); wp_redirect( $404_page ); exit(); }
La raisonpour laquelle vous devriez utiliser unepagepour la requête 404est la suivante: dans WP 404,lapageesten fait unepage qui n'existepas ,WP doit rechercher tout son contenu avant de retourner lapage 404et cetravailest ungaspillage de ressources.Utiliser unepagepréconfigurée quipourrait vous aider àexécuter votreblogplus rapidement.
Why don't you create a page that show error message and then redirect user to that page? Here is a simple way to achieve that:
Open the
404.php
file and add these lines to the top of it:/** * Template Name: 404 Page */
Create a page with
404 Page
template. Then redirect users:if ( !current_user_can('administrator') ) { $404_page = get_permalink( $404_page_id ); wp_redirect( $404_page ); exit(); }
The reason you should use a page for 404 request is: in WP 404 page actually is a page that doesn't exists, WP has to search for all of its content before returning the 404 page and that work is a waste of resource. Using a pre-configured page that might help you run your blog faster.
-
J'aipensé à l'utiliser.Mais quelquesinconvénients queje voisest que deuxmodèles 404 devraient être crééset maintenus (pageet réel).Le client devrait créer unepage 404.Etj'aimerais que l'URL reste lamême.Exemple,sije vais sur http://www.example.com/restricted,je ne seraipas redirigé vers .../404/I have thought about using this. But a couple downfalls that I see is that two 404 templates would have to be created and maintained (page and real). The client would have to create a 404 page. And I would like to keep the URL the same. Example, if I go to http://www.example.com/restricted, I would not be redirected to .../404/
- 0
- 2011-08-04
- Evan Yeung
-
Enfait,je viens de réaliser que le 404.phpest lemodèle.Monerreur.Actually I just realized that the 404.php is the template. My mistake.
- 0
- 2011-08-04
- Evan Yeung
-
Non,c'est uneidée assezterrible si vous aimez avoirn'importe queltype de classement depage.Lesmoteurs de recherchene considèrent que lespages qui renvoient unen-tête deplage 404 ou 4xx comme uneerreur de visualisation,et indexeront volontierstout ce qui renvoie unepage 200.Si vouseffectuez une redirection,vous dites aux robots d'exploration que votrepagenontrouvéeest unepage valide,et celagâchera le classement de votrepage.Tout ce que vous devez vraimentfaire lorsque vous obtenez unepage 404est defaire `http_response_code (404);exit (); `.Si vous voulez unepage,utilisez `get_template_part (404);` avant de quitter.C'est égalementbeaucoupplus rapide quen'importe quellefonctionnalité de wordpress.No, that is a pretty terrible idea if you like having any kind of page ranking. Search engines only consider pages that return a 404 or any 4xx range header as viewer error, and will happily index anything that returns a 200 page. If you do a redirect, then you are telling crawlers that your not found page is a valid page, and it will mess up your page ranking badly. All you really need to do when you get a 404 page is do `http_response_code(404); exit();`. If you want a page, then use `get_template_part( 404 );` before exit. That is also much faster than any wordpress functionality.
- 0
- 2018-03-15
- mopsyd
-
- 2017-09-26
J'avais uneexigence similaire oùje ne devaispas laisser les utilisateurs accéder à lapage author.phpen fonction du rôle d'un utilisateur. J'enregistre l'actiontemplate_redirectpourfairemes vérificationset rediriger vers lapage 404 avantmême que lapage réellene soit chargée .
Inscription:
add_action( 'template_redirect', [ $this, 'handle_inactive_users']);
Gestionnaire:
public function handle_inactive_users() { global $wp_query; if ( $wp_query->is_author() ) { $user = $wp_query->get_queried_object(); if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) { $wp_query->set_404(); status_header( 404 ); get_template_part( 404 ); exit(); } } }
Si vous avez choisi den'utiliser que l'extrait de code suivant aumilieu de lapartie dumodèle,lapage apeut-être déjà étépartiellement rendueet vousn'êtespas réellement redirigé vers unepage 404. Il vaut doncmieux lefaire dans l'action
template_redirect
-$wp_query->set_404(); status_header( 404 ); get_template_part( 404 ); exit();
I had a similar requirement where I should not let users access the author.php page based on the role a user was in. I register the template_redirect action to do my checks and redirect to 404 page even before the actual page is loaded.
Registration:
add_action( 'template_redirect', [ $this, 'handle_inactive_users']);
Handler:
public function handle_inactive_users() { global $wp_query; if ( $wp_query->is_author() ) { $user = $wp_query->get_queried_object(); if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) { $wp_query->set_404(); status_header( 404 ); get_template_part( 404 ); exit(); } } }
If you chose to only use the following code snippet in the middle of template part, the page may have already been rendered partially and you are not actually redirected to a 404 page. So better to do it in the
template_redirect
action -$wp_query->set_404(); status_header( 404 ); get_template_part( 404 ); exit();
-
- 2017-06-05
Vouspouvez écrire ce code dans lefichier 404.php du répertoire dethème actuellement utilisé (wp-content/themes/..../404.php) :
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: ".get_bloginfo('url')); exit(); ?>
Ce code doit commencer au début dufichier (sans aucun caractère avant) .
Lien vers l'original: Comment rediriger votrepage 404 vers lapage d'accueil de WordPress
You can write this code to file 404.php in actually used theme directory (wp-content/themes/..../404.php):
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: ".get_bloginfo('url')); exit(); ?>
This code must start from begin of file (without any characters before).
Link to original: How to Redirect your 404 page to the Home Page in WordPress
-
L'OP chercheen fait unmoyen d'afficher 404pour les utilisateurs quine répondentpas à certains critères,parex."Si l'utilisateur An'apas la capacité 'can_edit',alors affichez unepage 404."The OP is actually looking for a way to have 404 displayed for users that don't meet a certain criteria, e.g. "If user A doesn't have the 'can_edit' capability, then display a 404 page."
- 0
- 2017-06-05
- phatskat
-
Ne redirigezpas les 404.`Location: xxx` définit unen-tête 301,quiindique aux robots d'exploration qu'ilexisteen fait une ressource valideet tue votre classement lorsqu'ils déterminent qu'iln'yen apas.Do not redirect 404s. `Location: xxx` sets a 301 header, which tells crawlers that there is actually a valid resource, and kills your ranking when they determine that there isn't.
- 0
- 2018-03-15
- mopsyd
Existe-t-il unmoyen d'afficher unepage 404 si l'utilisateur actuellement connecténe disposepas des autorisationsnécessairespour afficher lapage?Je recherche uneméthode PHP,quelque chose comme
J'aipensé à utiliser une redirection,maisj'aimerais que l'URL reste lamême.