Comment définir une redirection vers une autre URL en PHP avant le chargement de la page ? Redirection php ucp hommes de l'Euroligue

6,1K

Supposons que vous souhaitiez afficher la page https://example.com/final.php aux utilisateurs qui accèdent à la page https://example.com/initial.php. Cela peut être fait avec quelques Méthodes PHP, JavaScript et HTML. Dans cet article, nous aborderons chacune des méthodes que vous pouvez utiliser pour rediriger PHP vers une autre page.

Voici quelques variables que nous utiliserons :

Utiliser la fonction PHP header() pour rediriger une URL

Si vous souhaitez ajouter une redirection de initial.php vers final.php , vous pouvez placer le code suivant sur la page Web initial.php. Il envoie un nouvel en-tête d'emplacement au navigateur :

Ici, nous utilisons la fonction PHP header() pour créer la redirection. Vous devez placer ce code avant tout code HTML ou texte. Sinon, vous recevrez une erreur indiquant que l'en-tête a déjà été envoyé. Vous pouvez également utiliser la mise en mémoire tampon de sortie pour éviter cette erreur d'envoi des en-têtes. L'exemple suivant montre cette technique de redirection PHP en action :

Pour effectuer une redirection à l'aide de la fonction header(), la fonction ob_start() doit être la première fonction du script PHP. Cela empêchera les erreurs d’en-tête de se produire.

Comme mesure supplémentaire, vous pouvez ajouter die() ou exit() immédiatement après la redirection de l'en-tête afin que le reste du code de la page Web ne s'exécute pas. Dans certains cas, les robots de recherche ou les navigateurs peuvent ne pas prêter attention à l'indication dans l'en-tête Location. Quelles sont les menaces potentielles pour la sécurité du site :

Pour être clair : die() ou exit() n'ont rien à voir avec les redirections. Ils sont utilisés pour empêcher l’exécution du reste du code de la page Web.

Lors de la redirection vers une page en PHP, il est recommandé d'utiliser des URL absolues lors de la spécification de la valeur d'en-tête Location. Mais les URL relatives fonctionneront également. Vous pouvez également utiliser cette fonctionnalité pour rediriger les utilisateurs vers des sites ou des pages Web externes.

Sortie du code de redirection JavaScript à l'aide de la fonction PHP echo()

Ce n'est pas une solution PHP pure. Cependant, il est également efficace. Vous pouvez utiliser la fonction PHP echo() pour générer le code JavaScript qui gérera la redirection.

Si vous utilisez cette solution, vous n'aurez pas besoin d'utiliser la mise en mémoire tampon de sortie. Cela évite également que des erreurs liées à l’envoi des en-têtes ne se produisent.

Vous trouverez ci-dessous quelques exemples utilisant différentes méthodes JavaScript pour rediriger de la page courante vers une autre :

Le seul inconvénient de cette méthode de redirection vers un autre site PHP est que le JavaScript s'exécute côté client. Et vos visiteurs peuvent avoir JavaScript désactivé.

Utilisation des balises méta HTML pour la redirection

Vous pouvez également utiliser du HTML de base pour effectuer la redirection. Cela peut sembler peu professionnel, mais cela fonctionne. Et vous n'avez pas à vous soucier de la désactivation de JavaScript dans votre navigateur ou de l'envoi préalable d'une erreur d'en-tête :

Vous pouvez également utiliser la dernière ligne de l'exemple précédent pour actualiser automatiquement la page toutes les "n" secondes. Par exemple, le code suivant actualisera automatiquement la page toutes les 8 secondes.

Bonjour les amis. Aujourd'hui, je voudrais aborder un sujet très galvaudé, mais toujours d'actualité - il s'agit de la redirection 301 (Permanent Redirect 301) - dans la communauté SEO, et sans formalités, c'est exactement ce que l'on entend par le mot « redirection ». Techniquement, il s’agit de la réponse du serveur à une requête qui lui est adressée ; cette réponse comporte le code 301, indiquant que l’adresse de la requête a été définitivement déplacée. À la suite de toutes ces machinations astucieuses, nous devrions recevoir une nouvelle adresse finale.

Je pense que vous n'avez pas besoin de ces aspects techniques, et c'est pourquoi je veux parler de choses appliquées - quand et dans quelles situations il est préférable d'utiliser une redirection, comment et avec quelles commandes vous pouvez configurer les règles de redirection, etc. Nous examinerons également les outils et services avec lesquels vous pourrez vérifier l'exactitude des redirections.

Comme le message s'est avéré très long, j'ai décidé de faire une table des matières pour votre commodité :

Quand DEVEZ-vous faire une redirection 301 ?

Tout d'abord, une redirection est utilisée lorsqu'une page (un groupe de pages ou une section entière) a changé d'adresse - le plus souvent, cela se produit lorsque la structure du site est modifiée, que la partie principale de l'URL est renommée ou que le principe de formation des adresses est modifié (c'est-à-dire CNC). Malheureusement, tout le monde n'y pense pas lorsqu'il modifie quelque chose sur le site, et par conséquent il y a beaucoup de doublons, ce qui entraîne des pertes de positions voire l'imposition de sanctions par les moteurs de recherche. Dans mon travail, je rencontre très souvent de telles situations, et il faut beaucoup de nerfs pour tout corriger et neutraliser les conséquences. En mon nom personnel, je peux recommander avant tout travail de changement de type de CNC ou de modification de structure, de faire un plan de la structure actuelle du site, de toutes ses rubriques et des exemples de pages de fin. Tout cela devra être vérifié une fois le travail terminé, afin que lorsque nous allons à l'ancienne adresse, nous arrivions à la nouvelle et que le serveur donne une redirection avec le code 301 (et non 302).

La prochaine utilisation courante des redirections 301 consiste à modifier l’adresse du site ou à coller des miroirs ensemble. Si vous décidez de modifier l'adresse du site Web dans le cadre du changement de marque de l'entreprise ou si vous enregistrez un nouveau domaine, plus beau et plus court, pour l'indiquer sur des produits promotionnels imprimés, il est très important que lors de l'accès à l'adresse de l'ancien domaine, l'utilisateur se retrouve sur la même page (et non sur page d'accueil), mais sur un nouveau domaine. Quant aux sites promotionnels, ils se composent généralement d'une ou deux pages, dont les liens mènent au site principal, ou lorsque vous accédez au site promotionnel, vous êtes immédiatement redirigé vers une page spéciale du site principal. Parfois, lors de la création d'un site Web, plusieurs domaines sont enregistrés à la fois, par exemple en raison de l'orthographe ambiguë du nom de l'entreprise en latin. Pour garantir que lors de la saisie intuitive d'une adresse, l'utilisateur arrive au bon endroit et que plusieurs domaines soient enregistrés, il est très important que des redirections 301 se produisent de tous les domaines « auxiliaires » vers une adresse principale. En aucun cas un même site Internet ne doit être accessible à toutes les adresses.

Et aussi à propos des miroirs - il peut arriver que votre site soit disponible aux adresses http://www.site.ru, http://site.ru et https://site.ru (cette dernière est rare, mais elle arrive) - ce sont toutes les erreurs classiques qui ne devraient pas être commises, et les redirections 301 participent à leur résolution. Tout comme dans le cas de différentes adresses de sites Web, vous devez choisir le miroir principal (avec www ou sans www) et mettre en place des redirections vers le miroir principal. Bien sûr, les moteurs de recherche ne sont pas stupides et dans de telles situations, ils se débrouillent souvent seuls, et vous pouvez également les aider en faisant paramètres corrects dans les panneaux des webmasters et dans robots.txt (pour Yandex, directive Host). Mais le SEO est une affaire délicate, et je ne compterais pas sur la chance, mais utiliserais une méthode éprouvée !

Parfois, une situation très désagréable se produit lorsqu'une copie du site devient disponible non seulement lorsque vous saisissez le nom de domaine dans la barre d'adresse, mais également l'adresse IP du serveur. Il est peu probable que cette situation se produise sur un hébergement mutualisé, mais si vous disposez d'un serveur dédié, cela peut facilement arriver. Cela peut être la raison d'une configuration incorrecte du serveur - désactiver l'accès lors de l'accès à une adresse IP aidera à résoudre le problème, mais la meilleure solution ici est une redirection 301 au niveau du serveur Web (Apache ou Nginx). Il y a quelques mois, j'ai eu une telle situation - j'avais un serveur dédié sur lequel certains sites étaient suspendus, mais pour l'un des sites, j'ai décidé de prendre un autre serveur distinct. J'ai transféré le site, tout a fonctionné comme sur des roulettes, et puis un jour je suis tombé sur un clone de mon site dans les résultats Google - choc, panique - il s'est avéré que c'était l'adresse IP de mon nouveau serveur et, bien sûr, de mon site vit dessus, et lorsqu'il est contacté, le serveur donne une réponse 200 OK, et Google l'a entièrement indexé. Il n'y avait pas de problème de ce type sur le serveur précédent ; une redirection 301 de l'IP vers le domaine spécifié comme principal pour cette IP a été initialement configurée. Maintenant, j'ai appris d'une expérience amère et je vérifie toujours de telles choses - soyez conscient et vous, ne répétez pas les erreurs. Le problème a été résolu en ajoutant une redirection vers le domaine principal aux configurations du serveur Web nginx ; je montrerai un exemple de code dans la partie pratique de l'article ci-dessous.

La situation est similaire à la précédente - lorsqu'une copie du site est localisée et accessible via un domaine de test de service, par exemple comme site.hosting.ru. De tels cas se produisent également dans ma pratique et, contrairement au cas précédent, ils sont typiques de l'hébergement virtuel. Pourquoi est-ce que cela existe ? Par exemple, vous n'avez pas encore acheté de domaine ou vous transférez un site d'un hébergement à un autre, mais les serveurs NS du domaine n'ont pas été modifiés ou n'ont pas encore été mis à jour Enregistrements DNS chez le fournisseur. Dans de telles situations, ils le font adresses de test, où vous pouvez tout configurer et installer avant de rediriger l'adresse du site vers le nouvel hébergement. Et certains hébergeurs pèchent en ne bloquant pas l'accès à de telles adresses techniques et en n'interdisant même pas leur indexation. Si vous rencontrez cette situation désagréable, vous devriez essayer d'enregistrer une redirection 301 de l'adresse technique vers l'adresse principale dans le fichier .htaccess.

Et bien sûr, les redirections 301 aiment vraiment utiliser les bons référencements pour lutter contre diverses pages en double. Pourquoi seulement les bons référenceurs ? Oui, parce que de mauvaises personnes sont entrées sur le site Web du client et, ce qui est fort probable, ont commencé à acheter des liens sans même visiter le site - hélas, ce n'est pas rare. Je suis périodiquement approché par des clients qui souhaitent vérifier l'intégrité de leurs sous-traitants/employés chargés de l'optimisation et de la promotion du site, la qualité du travail - - et jusqu'à présent, il ne m'est jamais arrivé de trouver des erreurs ou des lacunes. sur les sites. Alors gardez à l’esprit que je suis toujours heureux de vous aider. Revenons aux doublons - je pense qu'au lieu de bloquer l'indexation des doublons, il faut rediriger vers l'adresse principale, et ce n'est pas si intéressant. Bien sûr, il existe de nombreux cas où les prises sont forcées, et vous ne pouvez alors pas vous passer de la canonisation, mais si vous avez la possibilité de faire une redirection, assurez-vous de le faire. Cas fréquents de doublons qui doivent toujours être vérifiés : adresses avec et sans barre oblique à la fin, adresses avec paramètres et étiquettes - je vais vous expliquer comment résoudre ce problème ci-dessous.

Quand peut-on faire une redirection 301 ?

Vous ne pouvez pas écrire grand-chose dans cette section, mais je vais essayer. J'espère vraiment qu'après avoir lu, vous m'ajouterez quelques idées dans les commentaires.

La redirection 301 peut être utilisée comme réponse du serveur au lieu d'une erreur 404 Pas trouvé– autrement dit, un utilisateur qui suit un lien incorrect ou une page inexistante ne verra pas de message indiquant « Désolé, cette page n'existe plus » mais sera transféré vers une autre page existante. C'est un point très controversé parmi les experts, et je n'impose donc mon opinion à personne. Mais je préfère utiliser une redirection plutôt qu'une erreur 404, et il existe plusieurs options pour le développement des événements... Regardez, il existe 2 catégories d'erreurs 404 : la première est classique, lorsque la page a effectivement été supprimée, la la deuxième est lorsque l’erreur apparaît en raison de liens externes tordus. Dans le premier cas, vous ne devriez probablement pas effectuer de redirection, mais laisser l’erreur 404 telle quelle. Mais dans le second cas, vous devez vous occuper d'une redirection vers la bonne adresse URL, si elle peut être restaurée à partir d'un lien rompu, ou d'une redirection vers la page principale (ou la catégorie).

Quand NE PAS faire une redirection 301

Quelques mots sur les cas où une redirection peut vous nuire et ne doit donc pas être utilisée dans les situations suivantes.

Le plus important est d’éviter de commettre des erreurs, vous ne devez pas vous impliquer dans des redirections si vous n’êtes pas sûr à 100 % de ce que vous faites ou si vous doutez de quelque chose. Prenez cela comme un conseil amical :)

Une redirection permanente ne doit pas être utilisée pour des solutions temporaires, cela ressort clairement de son nom - pour une relocalisation temporaire, utilisez 302 Moved Temporously. Dans ce cas, les pages ne seront pas collées et la page avec la redirection pourra être restaurée à tout moment.

S'il y a des problèmes avec votre domaine, par exemple des filtres, des interdictions, etc., et que vous décidez de modifier l'adresse du site (domaine), vous ne devez pas effectuer de redirection 301 de l'ancien domaine vers le nouveau - en conséquence , vous «collerez» et tous les problèmes de l'ancien. Autrement dit, rien ne changera en fin de compte. Oui, il existait depuis quelques temps une solution pour sortir du filtre Google Penguin en utilisant une redirection 301 complète de l'ancien domaine vers le nouveau. En effet, toutes les positions ont été rétablies au niveau d'avant les sanctions, et cela semblait être une panacée pour le maléfique Pingouin, mais avec la prochaine mise à jour de l'algorithme, cette fonctionnalité a été prise en compte et le nouveau domaine est également tombé sous le filtre, par conséquent, rien ne s'est amélioré après le changement de domaine. Si vous avez déjà décidé de changer de domaine, vous pouvez essayer de transférer tout le contenu vers le nouveau domaine, le supprimer sur l'ancien et créer un talon avec un message concernant le déménagement, ou mieux encore, tout recommencer. de zéro.

Il existe de nombreuses façons d'effectuer une redirection 301 : via htaccess, php, javascript, paramètres du serveur, etc. - vous ne devriez donc pas essayer d'utiliser toutes les méthodes à la fois, le risque de « désaccords » entre différentes façons et vous pouvez, par exemple, obtenir une redirection cyclique infinie.

Lorsque vous travaillez avec une structure de site complexe ou que vous reconcevez un grand portail, plusieurs redirections ou longues chaînes se produisent souvent. Cela signifie que la redirection ne se produit pas en une seule étape, mais en deux ou plusieurs - c'est une mauvaise situation et doit être évitée si possible. Lorsque vous cliquez sur ce lien robot de recherche, après avoir reçu plusieurs redirections d'affilée, peut penser qu'il est trompé et cesser de suivre davantage et cesser complètement de prendre en compte les liens. Voici un exemple tiré de ma pratique : je suis tombé un jour sur un site pour un audit avec une chaîne aussi inattendue :

http://site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30/ ->
http://www.site.hosting.ru/404.php ->
http://www.site.ru/404.php

Et au final, la page http://www.site.ru/404.php, qui devrait donner une erreur 404, donne une réponse 200 OK. Cela m'a même époustouflé, mais imaginez ce que penserait un robot de recherche s'il pénétrait dans un tel carrousel ! Non seulement trois domaines différents ont participé à la chaîne, mais la page d'erreur indique également qu'il ne s'agit pas d'une erreur et qu'elle doit être indexée.

Si possible, efforcez-vous d'éviter les redirections au sein du site - si les liens externes vers le site ne peuvent pas être corrigés et qu'une redirection est inévitable, alors les liens internes doivent être corrigés. Cela n’affecte peut-être pas la qualité de l’indexation et du classement, mais vous ne pouvez pas en être sûr et il est donc préférable d’éviter de telles situations controversées. Un merveilleux vous aidera à suivre les redirections internes et généralement les erreurs au sein du site.

Lors de la création de règles de redirection dans .htaccess, excluez les adresses réelles des répertoires et des fichiers sur le serveur et surveillez la sélection. La situation d'un site que j'ai fait auditer une fois était que dans la lutte contre les pages de catégorie en double avec et sans barre oblique à la fin, le webmaster en faisait un peu trop et, au contraire, ne faisait qu'aggraver le problème. Non seulement les règles de réécriture ont affecté les vrais scripts js et les fichiers de style css, les empêchant de fonctionner correctement, mais certaines pages ont également reçu une barre oblique inutile à la fin et des doublons sont apparus. Amis, assurez-vous soigneusement que les règles que vous créez s'appliquent uniquement au groupe d'adresses avec lequel vous travaillez et limitent tous les autres.

Pour rechercher les pages problématiques et leurs adresses dont vous devez vous débarrasser, utilisez les capacités des panneaux de webmasters de Yandex et de Google. Pour Yandex Webmaster : Sélectionnez un site -> Indexation du site -> Pages exclues. Pour Google Webmaster : Sélectionnez le site -> Optimisation -> Optimisation HTML ; Et aussi : Sélectionnez le site -> Configuration -> Paramètres URL.

Fonctionnalités d'indexation et de réindexation des redirections dans Yandex et Google. Lorsque vous êtes aux prises avec des doublons et des adresses problématiques, vous attendrez bien sûr que les erreurs soient supprimées des panneaux du webmaster ; il existe certaines fonctionnalités ici. Avec Google, tout est simple : vous configurez des redirections, les modifications seront indexées dans un délai de 2 semaines, pendant ce temps les erreurs commenceront à disparaître du panneau du webmaster, généralement après un mois toutes les erreurs disparaissent. Avec Yandex, il y a une subtilité, et c'est la suivante : après avoir configuré les redirections, vous pouvez attendre indéfiniment que les erreurs disparaissent du panneau. Une fois, j'ai attendu six mois jusqu'à ce que j'écrive au support, où ils m'ont informé qu'en plus à la redirection, il est nécessaire de fermer en plus les pages problématiques dans robots.txt et alors seulement elles disparaîtront du panneau du webmaster.

Redirection permanente 301 via .htaccess

Cette méthode d’installation des redirections est la plus populaire et la plus simple. Bien que, je dois l'admettre, tout ne soit pas aussi simple qu'il y paraît, j'ai donc l'intention d'écrire un article séparé sur htaccess. Du coté positif cette méthode On peut noter que la redirection est déclenchée au niveau du serveur et avant le début du traitement des scripts du site et n'entraîne aucune charge supplémentaire.

Vous avez probablement déjà un fichier .htaccess sur votre serveur (à la racine, là où se trouve le fichier index.php principal). Si ce fichier n'est pas visible :

  • Vérifiez les paramètres du gestionnaire FTP, il peut masquer les systèmes et les fichiers, qui est le fichier htaccess
  • Aller à gestionnaire de fichiers via le panneau de contrôle de l'hébergeur et vérifiez les autorisations pour le fichier. Je ne parle pas de CHMOD, mais d'un groupe et d'un utilisateur par exemple, il peut y avoir utilisateur root, et vous vous connectez via FTP en utilisant l'accès utilisateur du propriétaire du domaine.
  • Le fichier peut tout simplement ne pas exister :) Ensuite, il faut le créer, mais sous Windows, un problème survient parfois, car en fait, le fichier .htaccess est vu par le système comme un fichier sans nom et uniquement avec une extension. Je suggère un moyen simple : créez un fichier txt normal, ajoutez-y la ligne « RewriteEngine On » (sans guillemets), téléchargez le fichier txt sur le serveur, renommez le fichier en .htaccess sur le serveur.

La plupart des modifications liées à la redirection doivent être écrites au tout début du fichier après la ligne « RewriteEngine On » afin que ces règles soient traitées en premier. Il est important de suivre la séquence d'actions, car les commandes sont traitées par le serveur ligne par ligne depuis le tout début jusqu'à la première occurrence. En d’autres termes, vous devez toujours commencer par un échantillon particulier et terminer par un échantillon plus général.

Examinons quelques-uns des exemples les plus courants et les plus utiles :

Redirection 301 pour un domaine de www.site.ru vers site.ru

RewriteCond %(HTTP_HOST) !^www\.(.*) RewriteRule ^(.*)$ http://www.%1/$1

Les options de redirection ci-dessus fonctionnent très bien et ne nécessitent aucune modification de votre part : insérez simplement le fichier dans le fichier .htaccess. Cependant, pour être sûr à 100%, je vous conseille une autre option :

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

Le premier s’adresse à ceux qui ont un domaine principal avec www, le second s’adresse à ceux sans www. Par conséquent, dans les deux exemples, vous devez saisir le nom de votre domaine au lieu de « site ».
Alors, pourquoi ces options sont-elles meilleures ? Très simplement, ils vérifient non seulement l'absence/présence de www dans le nom de domaine, mais vérifient également la pleine conformité du nom de domaine.
Exemple concret : vous avez sûrement déjà été confronté au fait qu'un site peut être indexé de manière inattendue par une adresse de service sur l'hébergement (une telle adresse est émise pour que le site soit accessible avant de lier votre domaine réel), un miroir, ou même une IP. adresse! Ainsi, les règles universelles vérifieront uniquement l’absence/présence de www, et peu importe le domaine auquel accède l’utilisateur ou le robot de recherche.
Ainsi, en utilisant l'option avancée, vous serez sûr à 146% que votre site sera accessible uniquement et exclusivement en utilisant le nom de domaine que vous avez personnellement indiqué et en tenant compte de www. Je n'utilise que cette option et vous la recommande !

Redirection 301 de http vers https

Face à la transition massive des sites vers un protocole sécurisé, il faut savoir comment rediriger du http vers https. D'ailleurs, si vous n'avez pas encore choisi de certificat SSL, vous devriez lire mon article sur .

Ci-dessous je vous propose plusieurs options pour une redirection 301 du protocole http vers https, qui peut fonctionner ou non selon la configuration de votre serveur, mais une des règles vous conviendra certainement :

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(SERVER_PORT) !^443 $ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(SERVER_PORT) !^443$ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) off RewriteCond %(HTTP:X-Forwarded-Proto) !https RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

Redirection du protocole https vers http (honnêtement, je ne sais pas pourquoi vous pourriez en avoir besoin) :

RewriteCond %(HTTPS) =on RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) =on RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

Récemment, j'ai écrit très Instructions détaillées. Si vous envisagez de passer du https au https, vous vous devez de le lire !

Permettez-moi d'apporter un peu de clarté à ce charabia incompréhensible :

  • RewriteCond désigne une condition qui, si elle correspond, exécutera la RewriteRule. En utilisant expressions régulières des modèles de chaînes sont spécifiés.
  • Variables du serveur :
    • %(REQUEST_URI) - partie de l'URL sans nom de domaine et paramètres GET, par exemple, pour la page que vous lisez actuellement : blog/post/4393,
    • %(HTTP_HOST) - hôte ou Nom de domaine, par exemple : site Web
    • %(QUERY_STRING) - une chaîne avec un ensemble de paramètres GET, c'est-à-dire la partie de l'URL après le point d'interrogation (et avant la grille d'ancrage, s'il y en a une).
    • %(REQUEST_FILENAME) — chemin complet V système de fichiers serveur vers un fichier ou un script correspondant à cette requête..php, mais dans le système de fichiers du serveur, c'est la terrible ligne /var/www/site/data/www/site/index.php.
      Il arrive que lors d'une redirection, vous obteniez un résultat inattendu, par exemple, vous vouliez supprimer les paramètres post=17434801_4060 à l'adresse http://site.ru/page-name?post=17434801_4060 , indiqué les règles correspondantes ( ils seront écrits ci-dessous), mais à la fin, nous avons obtenu la ligne http://site.ru/usr/local/www/site.ru/www/page-name - nous nous sommes débarrassés des paramètres, mais avons obtenu un adresse étrange. Tout cela est dû au fait que vous n'avez pas spécifié de directive RewriteBase / au début du fichier après RewriteEngine On, qui définit une URL de base spécifique pour les transformations dans le contexte d'un répertoire.
  • Les métacaractères sont utilisés pour définir des groupes de caractères ou des « balises » dans un modèle :
    • ^ — marque de début de ligne,
    • $ est la marque de fin de ligne,
    • ! - le déni,
    • \ - barre oblique d'échappement, permet de considérer le métacaractère qui le suit comme un caractère normal,
    • . – point, désigne n'importe quel caractère, mais un seul,
    • () – regroupement.
  • Les modificateurs sont placés après les caractères normaux, les métacaractères ou leurs groupes et élargissent les possibilités d'utilisation des modèles :
    • ? — le symbole est répété 0 ou 1 fois,
    • * — Répété de 0 à 65536 fois,
    • + — Se répète de 1 à 65 536 fois.
  • Les indicateurs définissent des options supplémentaires pour cette règle et sont répertoriés dans crochets séparé par des virgules:
    • NC - (nocase) désactive la vérification des cas.
    • R - (redirection) arrête le processus de conversion et renvoie le résultat au navigateur client sous forme de redirection vers cette page(302, DÉPLACÉ TEMPORAIRE). Avec cet indicateur, vous pouvez spécifier un code de résultat différent, par exemple R=301 renverra une redirection avec le code 301 (Déplacé en permanence). Comme vous le comprenez, c'est exactement ce dont nous avons besoin.
    • L - (dernier) arrête le processus de conversion et le lien actuel est considéré comme final.

Le cas le plus courant est une redirection 301 depuis index.php (html) vers la page principale. Sur 90% des sites, il y a un problème de duplication de la page principale aux adresses http://site.ru et http://site.ru/index.php (ou index.html, index.htm ou toute autre option , peu importe, ou même d'un seul coup). Quelque part, cela est évident lorsque, par exemple, un lien du logo mène à site.ru et qu'un lien dans le menu mène à site.ru/index.php, quelque part ce n'est pas évident lorsqu'un doublon est trouvé lors de la saisie l'adresse de index.php manuellement. Il est important de résoudre simplement le problème. Et je vous propose une option universelle, la voici :

RewriteCond %(THE_REQUEST) ^(3 ,9 )\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

Collez simplement ce code inchangé après la ligne après la ligne "RewriteEngine On" et pas de problème !

Beaucoup de ceux qui commencent à avoir du mal avec les doublons sur le site se demandent d'où viennent ces liens qui dupliquent la page principale http://site.ru/page-name.html&post=-1234567_8901 ? D'où vient le préfixe &post=-1234567_8901 - ce « bien » est tiré de VKontakte, lorsque quelqu'un partage un lien vers votre site sur son mur, dans un groupe ou en public, une ligne similaire est automatiquement ajoutée, apparemment pour suivre certaines statistiques .

Pour vous débarrasser une fois pour toutes de ces absurdités, vous devez ajouter à htaccess :

RewriteCond %(REQUEST_URI) ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1

Comme vous pouvez le voir, il n'y a aucune différence entre ce cas et le cas précédent, même si vous avez &post= ou &sa= ou autre dans l'url, la solution est la même, il vous suffit de remplacer les parties évidentes du code. clair, non ?

Se débarrasser des paramètres ou des balises dans l'adresse

La question a été posée dans les commentaires et à plusieurs reprises sur le forum, elle ne peut donc être ignorée. Que faire de tels doublons : http://site.ru/?abrakadabra ou un cas plus réel http://site.ru?utm_source=twitterfeed&utm_medium=twitter

Ce cas est légèrement différent du point suivant, où nous allons nous débarrasser des paramètres du script PHP, puisqu'ici nous ne transmettons pas l'adresse et les paramètres habituels au script. Voici la solution :

RewriteCond %(QUERY_STRING) ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php

%(QUERY_STRING) est une chaîne avec un ensemble de variables pour PHP, la partie de l'URL après le point d'interrogation (et avant le hachage d'ancre, s'il y en a un).

URL d'appel - http://site.ru/index.php?lang=ru

RéécritureCond %(QUERY_STRING) ^lang=ru $
L'URL demandée relève de cette règle, il n'y a pas d'autres règles, donc la RewriteRule sera exécutée dans la ligne ci-dessous.
RewriteRule ^(.*) \.php\?(.*) $ $1 \.php

URL source : http://site.ru/index .php?lang=ru
Modèle d'analyse d'URL : ^(.*) \.php\?(.*) $
L'URL sera analysée en variables : $1 = http://site.ru/index, $2 = lang=ru et assemblée sous la forme http://site.ru/index .php ($1 \.php)
Et puis il y aura une redirection 301 vers la nouvelle URL.

Exemple de règles lors du changement de structure du site

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

Ce sont les lignes que j'ai dû ajouter au fichier htaccess lorsque j'ai modifié la structure de mon blog.

Auparavant, j'avais les adresses suivantes : https://site/post/4358 et https://site/post/category/seo, ce qui brisait en quelque sorte la logique de la structure - après tout, le blog n'est qu'une partie du site , mais pour une raison quelconque, les articles appartiennent au site, pas au blog, et les catégories appartiennent aux articles, ce qui est également complètement illogique..info/blog/category/seo - maintenant le blog est une section distincte du site, et les articles lui appartiennent, et les catégories appartiennent au blog, pas les articles.

Le même exemple montre clairement qu’il est important de suivre la séquence des règles. Si j'échangeais les lignes, c'est-à-dire que la ligne RewriteRule ^post/(..info/blog/post/category/seo viendrait devant et non comme elle le devrait sur https://site/blog/category/seo.

Et le dernier exemple est l'analyse d'une erreur courante avec l'adresse de la racine du serveur

Par exemple, vous avez décidé de résoudre un problème lorsque la page de catégorie est disponible à deux adresses http://site.ru/razdel/podrazdel/index.php et http://site.ru/razdel/podrazdel/. La deuxième URL est correcte et la principale, et l'URL avec index.php à la fin est un doublon complet qui doit être supprimé.

Afin de rediriger depuis index.php vers une catégorie, vous écrivez la règle suivante :

RewriteEngine sur RewriteBase /

Redirection 301 de page en page vers une nouvelle adresse

Le cas le plus simple est celui où vous devez rediriger une page vers une autre adresse. Si vous devez effectuer une redirection sur plusieurs pages, vous devrez rédiger plusieurs règles, mais dans ce cas il est préférable d'utiliser les modèles décrits ci-dessus. Il existe plusieurs options de syntaxe complètement identiques :

Redirection 301 /page-name1.html http://site.ru/page-name2.html Redirection permanente /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Redirection 301 /page-name1.html http://site.ru/page-name2.html Redirection permanente /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Choisissez l’une des trois, mais personnellement, je préfère la première option : elle est plus courte, plus simple et plus compréhensible. À propos, ici site.ru n'est pas nécessairement le même domaine, mais n'importe quel autre.

Finissons avec .htaccess et passons à PHP.

Redirection permanente 301 en utilisant PHP

J'utilise généralement la redirection PHP lorsqu'il y a des difficultés avec .htaccess ou qu'il s'avère que la fonction PHP s'avère plus logique et compréhensible.

La syntaxe d'une redirection 301 en php ressemble à ceci :

entête(); header("Emplacement : http://site.ru"); mourir("Redirection" );

header("HTTP/1.1 301 déplacé définitivement"); header("Emplacement : http://site.ru"); die("Redirection");

Ces lignes indiquent au navigateur du client qu'il est nécessaire de rediriger en permanence une page demandée vers l'adresse http://site.ru. Dans ce cas, http://site.ru peut être non seulement l'adresse de la page principale du site actuel, mais peut également être n'importe quel autre site. Si quelque chose ne va pas et qu'une erreur se produit, alors dans la fenêtre du navigateur, nous verrons l'inscription « Redirection ».

Pour que ce soit plus clair, voici quelques exemples de fonctions que j'ai écrites pour mon site de blog, essayant de résoudre certains problèmes.

Une fonction qui vous permet de supprimer une certaine partie de l'url

if (strpos($_SERVER["REQUEST_URI" ], "http://site" ) !== false) ( $real_page_url = "http://site" .str_replace ("/http://site" , "" , $_SERVER["REQUEST_URI" ]); en-tête ("HTTP/1.1 301 déplacé de façon permanente" ); en-tête ("Emplacement : $real_page_url" ); die("Redirect" ); )

if (strpos($_SERVER["REQUEST_URI"], "http://site") !== false) ( $real_page_url = "http://site"..1 301 Déplacé de façon permanente"); header("Emplacement : $real_page_url"); die("Redirection"); )

Une fois que j'ai eu un problème avec un tas d'erreurs 404 apparaissant dans le panneau du webmaster, les adresses de ces pages ressemblaient à https://alaev..e. Quelque part dans l’adresse, une adresse de site en double est apparue. Et puis j'ai écrit une fonction qui vérifie si l'URI (attention, pas l'URL, mais l'URI) contient l'entrée « http://site », et si c'est le cas, nous découpons ce morceau de l'adresse et écrivons le résultat vers la variable $real_page_url, puis nous effectuons une redirection 301 vers la bonne adresse à partir de la variable.

Fonction qui supprime la barre oblique finale de l'URL

if (($_SERVER["REQUEST_URI" ], - 1 , 1 ) == "/" ) ( $requested_url = rtrim($requested_url, "/" ); en-tête ("HTTP/1.0 301 déplacé de façon permanente" ); en-tête ( "Emplacement : $requested_url" ); die("Redirect" ); )

if (($_SERVER["REQUEST_URI"], - 1, 1) == "/") ( $requested_url = rtrim($requested_url, "/"); header("HTTP/1.0 301 déplacé de façon permanente"); header( "Emplacement : $requested_url"); die("Redirect"); )

Voici la fonction la plus simple qui regarde si l'adresse demandée de la page a une barre oblique à la fin, et s'il y en a une, la barre oblique est coupée et une redirection 301 se produit vers l'adresse sans la barre oblique.

Il existe de nombreuses autres options qui vous permettent d'émettre une commande de redirection dans différents langages de programmation, tels que ASP, Ruby on Rail, etc., mais je ne suis pas familier avec ces langages, donc je ne serai pas malin et ne vous tromperai pas ici. . Les redirections sont également possibles à l'aide de la balise méta metafresh, ainsi que les redirections vers javascript - mais c'est le sort des développeurs de portes malhonnêtes, et les moteurs de recherche ne comprennent pas ces redirections ; ils reçoivent une réponse 200 OK du serveur. Nous n’envisageons donc pas ces options.

Redirection permanente 301 pour le serveur nginx

Vous vous souvenez que j'ai écrit à propos d'un miroir de mon site, accessible via IP ? En conséquence, le problème a été résolu par une redirection écrite dans le fichier de configuration du serveur, généralement situé ici /etc/nginx/nginx.conf. Les lignes suivantes y étaient écrites :

serveur (écouter 1.2.34.123:80 par défaut ; nom_serveur _ ; réécrire ^/(.*)$ http://site.ru/$1 permanent ; )

serveur (écouter 1.2.34.123:80 par défaut ; nom_serveur _ ; réécrire ^/(.*)$ http://site.ru/$1 permanent ; )

Il est indiqué ici que si une adresse IP est accessible via le port 80, il est alors nécessaire d'effectuer une redirection permanente vers site.ru.

Cependant, le support technique ne m'a pas recommandé de le faire avec les mots : « Il serait plus correct de configurer le serveur HTTP de manière à ce qu'il ferme simplement la connexion s'il est accédé à une adresse qui n'est pas explicitement spécifiée dans le Configuration du serveur HTTP, c'est l'option la plus fiable, la plus simple, la plus sûre et la moins exigeante pour les ressources du serveur. Après un certain temps, les pages qui ne sont plus accessibles seront probablement exclues de l'index des moteurs de recherche.

Le conseil suivant était le suivant : « Lorsque vous devez simplement fermer la connexion au lieu de rediriger, alors au lieu de la ligne, spécifiez « rewrite ^/(.*)$ http://site.ru/$1 permanent ; » une telle ligne "retour 444 ;". Ensuite, exécutez : "invoke-rc.d nginx reload"".

Peut-être que cela aidera quelqu'un.

Exemples de redirections dans les cas les plus courants

Redirection du domaine www.site.ru vers site.ru

serveur ( écouter 80 ; nom_serveur site.ru ; réécrire ^ http://www.site.ru$request_uri? permanent ; )

Redirection de http://site.ru/index.php vers http://site.ru/

location = /index.php ( if ($request_uri = /index.php) ( réécriture ^ http://$host? permanent;#301 redirect ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; include fastcgi_params ; )

location = /index.php ( if ($request_uri = /index.php) ( réécriture ^ http://$host? permanent;#301 redirect ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; include fastcgi_params ; )

Quelque chose comme ca. Je ne suis pas doué pour configurer des configurations pour nginx ; je me contente toujours des paramètres Apache, donc si vous avez des questions sur nginx, il est peu probable que je puisse vous aider...

Comment vérifier les en-têtes HTTP et les statuts de réponse du serveur

Dans cette section, je voulais décrire divers services et plugins pour vérifier la réponse du serveur, mais je comprends que cet article est déjà si volumineux que je devrai me limiter aux liens vers des extensions pour Navigateurs Chrome et Firefox.

Module complémentaire HttpFox pour Firefox

HttpFox (voici un lien vers l'addon) est mon outil de suivi d'en-tête http préféré. HttpFox affiche la progression du chargement des pages ligne par ligne, ce qui permet de suivre, par exemple, les chaînes de redirections et, en général, l'ordre et la vitesse de chargement des pages. Si vous utilisez Mozilla, je le recommande vivement.

Extension d'en-têtes HTTP pour Chrome

Je n'utilise moi-même pas l'extension HTTP Headers (voici un lien vers celle-ci), mais Internet m'a conseillé d'y prêter attention. Si vous avez de meilleures options, veuillez poster dans les commentaires.

Ceci conclut mon article terriblement long et ennuyeux, mes amis.
Merci d'avoir lu jusqu'au bout, j'espère que vous l'avez trouvé vraiment utile.

Le fichier de configuration .htaccess est une configuration pour les serveurs Web Apache. La plupart des sites d'hébergement fonctionnent via ce serveur, donc chaque site dispose de ce fichier. Les webmasters peuvent contrôler partiellement son fonctionnement en effectuant leurs propres modifications. Dans cet article, nous examinerons les directives et règles qui peuvent être modifiées lors du fonctionnement du serveur.

Le fichier .htaccess le plus important se trouve à la racine du site :

Ses actions s'appliquent au répertoire courant et à tous les sous-répertoires. Ceux. Les propriétaires de sites ont la possibilité d'influencer uniquement le travail de leur projet sans interférer avec le travail de l'ensemble du serveur. Si ce fichier est manquant, il peut être créé à l'aide de n'importe quel bloc-notes. L'essentiel est que le nom du fichier soit ".htaccess" - sans les formats .txt, .doc, etc.

Les redirections 301 sont le plus souvent configurées au niveau du serveur via le fichier .htaccess, ce qui accélère considérablement le processus de basculement vers nouvelle page, parce que pas besoin de charger une page intermédiaire. Il précise également quel fichier traite l'erreur 404.

Ci-dessous, nous examinerons toutes les options courantes pour les redirections via .htaccess, et nous nous familiariserons d'abord avec les options et les règles.

Pour pouvoir travailler avec des redirections, vous devez activer le module ReWriteEngine. Pour ce faire, vous devez écrire deux lignes de code (de préférence tout en haut du fichier .htaccess) :

Options + FollowSymLinks RewriteEngine activé

Placez ces lignes tout en haut de votre fichier .htaccess pour pouvoir travailler avec les directives du module mod_write.

De plus, les modules mod_alias doivent être activés sur l'hébergement (pour prendre en charge Redirect, RedirectPermanent et RedirectMatch).

1. Règles de redirection, RewriteRule et RewriteCond 1.1. Directive de redirection

Syntaxe de redirection :

Redirection /depuis http://vers_adresse_complète

Redirect définit une redirection directe d'une page à une autre.

Le code de redirection est écrit dans status. Est un paramètre facultatif. Le plus souvent, ils écrivent 301, ce qui signale un changement permanent de l'adresse de la page.

Il est important que la page « de » soit rédigée dans un format sans indiquer l'adresse complète du site, mais en indiquant l'URL relative complète commençant par une barre oblique « / » (c'est-à-dire depuis la racine du site). La page où va la redirection doit être écrite dans son intégralité, c'est-à-dire Adresse URL absolue de la page (c'est-à-dire avec le nom de domaine et le protocole http ou https).

Par exemple

Redirection 301 /oldpage.php http://site/newpage.php

Vous pouvez aussi l'écrire différemment

RedirectPermanent 301 /oldpage.php http://site/newpage.php ou Redirect permanent 301 /oldpage.php http://site/newpage.php 1.2. Directive RéécritureRule

La directive RewriteRule définit les règles de transition. La syntaxe est la suivante :

Substitution de modèle RewriteRule [codes]
  • Lorsqu'une redirection externe se produit, l'URL dans la ligne du navigateur change - " "
  • Avec interne - ne modifie pas l'URL dans la ligne du navigateur - " " ou "[L] "
1.3. Directive RéécritureCond

La directive RewriteCond définit les conditions dans lesquelles les règles de RewriteRule sont exécutées.

Condition RewriteCond Comparison_String

Par exemple, ces termes peuvent être le navigateur de l'utilisateur, son adresse IP, son titre, etc.

1.4. Directive RedirectionMatch

La directive RedirectMatch est similaire à Redirect, la seule différence étant qu'elle permet d'écrire des expressions régulières.

RedirectMatch From Where To 2. Exemples de redirections 301 dans .htaccess

Nous avons déjà vu de nombreux exemples avec une redirection .htaccess dans les articles :

  • Modification de l'adresse du site Web - redirection de l'ancien domaine vers le nouveau

Ici, nous ajouterons des options pour les redirections qui n'existaient pas encore.

2.1. Redirection d'une page à une autre

Redirection de site.ru/cat/oldpage vers site.ru/newpage.html

RewriteRule ^cat/oldpage.* /newpage.html

Ou la deuxième option :

Redirection 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Redirection de tous les fichiers .htm vers .html RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html

Ou la deuxième option :

RewriteRule ^(.*)\.htm$ $1.html 2.3. Rediriger l'intégralité du répertoire vers une autre page

Toute page du répertoire /old/ et des sous-répertoires sera redirigée vers /new.php

RewriteRule ^old(.*)$ /new.php 2.4. Supprimer les barres obliques supplémentaires d'une URL

Par exemple, la page /catalog///stranica.html est accessible et s'ouvre. Pour éviter cette situation et ne pas créer un nombre infini de doublons, vous devez écrire la redirection suivante

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. Réécrire sans redirection

Vous pouvez charger une autre page sans modifier l'URL de la page. Par exemple, chargeons la page /news.html, et la barre d'adresse affichera l'adresse /news/happy

RewriteRule ^news/happy.* /news.html [L] 2.6. Ajout d'une barre oblique à la fin de l'adresse de la page d'accueil

Par exemple, de nombreux serveurs fonctionnent de telle manière que la dernière barre oblique n'est pas écrite dans l'URL. Par exemple, http://site.ru. Le code ci-dessous résout ce problème : le site s'ouvrira sur http://site.ru/

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/ 2.7. Suppression du répertoire du répertoire de l'URL

Par exemple, pour rediriger de la page site.com/directoriya/stranica.html vers site.com/stranica.html, vous devez saisir ce qui suit :

RewriteRule ^directoriya/(.+)$ http://site.com/$1

Ou la deuxième option :

RewriteCond %(DOCUMENT_ROOT)/directoriya/$1 -f RewriteRule ^(.*)$directoriya/$1 2.8. Rediriger les paramètres GET

Par exemple, redirigez depuis la page /?act=page&id=2 vers /page-2/

RewriteCond %(QUERY_STRING) act=page RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Rediriger vers version mobile site m.site.ru

Dans cet exemple, on vérifie d'abord que l'utilisateur a ouvert le site avec appareil mobile(HTTP_USER_AGENT), puis l'adresse du site est remplacée par m.URL

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib| symbian|sans fil|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx |panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto |iphone|android) RewriteRule ^$ http://m.%1 2.10. Redirection depuis un sous-domaine

Par exemple, redirigons de n'importe quelle page du sous-domaine poddomen.site.ru vers le domaine principal site.ru

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI) 3. Autres exemples avec htaccess 3.1. Refuser l'adresse IP et le navigateur

Nous interdirons l'ouverture du site à un utilisateur utilisant un navigateur IE avec l'adresse IP 172.111.222.55.

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Refuser un fichier spécifique

Désactivons le fichier Disable_file.html pour tout le monde :

nier de tous 3.3. Autoriser l'accès à partir d'une IP

L'accès ne sera autorisé qu'à partir d'une seule adresse IP 172.111.222.55

ordre refuser, autoriser le refus de tous autoriser à partir du 172.111.222.55 3.4. Refuser l'accès à partir de différentes IP

Refuser l'accès au site à partir de plusieurs adresses IP 172.112.222.55, 172.113.222.55, 172.114.*.*

ordre refuser, autoriser le refus de tous les refus du 172.112.222.55 refuser du 172.113.222.55 refuser 172.114.*.* 3.5. Rediriger l'URL des gros caractères vers les petits

Toutes les lettres majuscules de l'URL seront converties en lettres minuscules.

RéécrireRule - RéécrireRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.* )$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*) F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^ I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q( .*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T] *)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^( [^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y $2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %(ENV:HASCAPS) TRUE RewriteRule ^/?(.*) /$1

Assez point important lors de la création du site. Une redirection mal configurée peut considérablement endommager les résultats de recherche du site. Les situations les plus courantes dans lesquelles vous devez utiliser la redirection permanente 301 :

  • Modification de l'adresse du site - vous avez acheté votre domaine et décidé de passer de site.example.com à site.ru
  • Collage de miroirs - si votre site est disponible sur www.site.ru et site.ru, moteurs de recherche peut considérer cela comme deux sites différents, vous devez donc d'abord choisir le miroir principal (avec www ou sans www) et configurer des redirections vers le miroir principal.
  • Lorsqu'une page (une ou plusieurs) changeait d'adresse, à un moment donné, il devenait évident que les adresses http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 n'étaient pas bonnes et qu'elles devaient être changé en http://example.com/sport/news12, mais c'est dommage de perdre des positions dans l'index des moteurs de recherche (puisque ce sera un nouvel article pour eux).
  • Une autre façon de gérer les pages en double

Important : si la page a été déplacée temporairement, utilisez 302 Déplacée temporairement. Dans ce cas, les pages ne seront pas fusionnées et la page avec la redirection pourra toujours être restaurée.

Redirection permanente 301 pour Apache (.htaccess)

Vous devez insérer les règles immédiatement après les lignes :

RewriteEngine On RewriteBase / # pour tronquer le chemin complet, de la racine du serveur à la racine du site

les règles elles-mêmes sont spécifiées à l'aide d'expressions régulières ; rappelez-vous la syntaxe :

  • Métacaractères, pour spécifier des groupes de caractères ou des « étiquettes » dans un modèle :
    • ^ - marque de début de ligne,
    • $ - marque de fin de ligne,
    • ! - le déni,
    • \ - barre oblique d'échappement, permet de considérer le métacaractère qui le suit comme un caractère normal,
    • . - point, désigne n'importe quel caractère, mais un seul,
    • () - regroupement.
  • Les modificateurs sont placés après les caractères normaux, les métacaractères ou leurs groupes :
    • ? - le symbole est répété 0 ou 1 fois,
    • * - répété de 0 à 65536 fois,
    • + - répété de 1 à 65536 fois.
  • Les indicateurs définissent des options supplémentaires pour cette règle :
    • NC - (nocase) désactive la vérification des cas.
    • R - (redirection) arrête le processus de conversion et renvoie le résultat au navigateur client sous forme de redirection vers cette page (302, DÉPLACÉ TEMPORAIRE).
      Avec cet indicateur, vous pouvez spécifier un code de résultat différent, par exemple R=301 renverra une redirection avec le code 301 (Déplacé en permanence). Comme vous le comprenez, c'est exactement ce dont nous avons besoin.
    • L - (dernier) arrête le processus de conversion et le lien actuel est considéré comme final.

Considérez les situations les plus courantes :

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 RewriteCond désigne la condition qui, si elle correspond, exécutera la règle RewriteRule. Redirection depuis index.php (html) vers la page principale RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php| html |htm)$ $1 Redirection lors du changement de structure du site RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 Redirection permanente 301 en PHP

Pour informer le navigateur que la page qu'il a demandée doit être redirigée vers http://site.ru, exécutez les commandes suivantes :

Header("HTTP/1.1 301 déplacé définitivement"); header("Emplacement : http://site.ru"); sortie();

Redirection permanente 301 pour nginx

Les règles de redirection sont décrites dans la section serveur.

Redirection de www.site.ru vers le serveur site.ru (écouter 80 ; nom_serveur www.site.ru ; réécrire ^ http://site.ru$request_uri? permanent ; )

ou règle générale pour tous les sites :

Serveur ( nom_serveur ~^(?! www\.); réécrire ^ http://www.$host$request_uri permanent; )

Redirection depuis site.ru vers le serveur www.site.ru (écouter 80 ; nom_serveur site.ru ; réécrire ^ http://www.site.ru$request_uri? permanent ; ) Redirection depuis index.php vers l'emplacement de la page principale = / index.php ( if ($request_uri = /index.php) ( réécriture ^ http://$host? permanent;#301 redirect ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root $ fastcgi_script_name ; include fastcgi_params ; )

Un code d'état HTTP avec le statut 301 Moved Permanently indique que le document demandé a été définitivement déplacé vers le nouvel URI spécifié dans le champ Location de l'en-tête.

Pourquoi est-ce?

Tout d'abord, lors d'un changement de nom de domaine d'un site, il est nécessaire d'informer les moteurs de recherche du changement d'adresse du site. Deuxièmement, fusionner le nom du site avec et sans www. Troisièmement, pour transférer rapidement le Page Rank vers un nouveau site.

PHP

Première méthode

Deuxième méthode

Perl

Première méthode

$cgi = nouveau CGI ; print $cgi->redirect("http://www.example.com/");

Deuxième méthode

#!/usr/bin/perl -w use strict; print "Statut : 301 déplacé de façon permanente\n" ; imprimer "Emplacement : http://www.example.com/\n\n" ; sortie;

ASP.NET

Première méthode

private void Page_Load (expéditeur d'objet, System.EventArgs e) ( Response.Status = "301 déplacé de façon permanente"; Response.AddHeader("Location","http://www.example.com"); )

Deuxième méthode (à partir de la version 4.0)

RedirectPermanent("http://www.example.com");

ASP Ruby on Rails def do_something headers["Status"] = "301 Moved Permanently" redirect_to "http://www.example.com/" end ColdFusion Java (JSP) Apache Web Server (.htaccess)

Première méthode (mod_alias, redirection)

Redirection 301 / http://www.example.com

Deuxième méthode (mod_alias, RedirectPermanent)

RedirectionPermanente / http://www.example.com

Troisième méthode (mod_alias, redirection permanente)

Redirection permanente / http://www.example.com

Méthode quatre (mod_alias, RedirectMatch)

RedirectMatch 301 ^(.*)$ http://www.example.com/

Cinquième méthode (mod_rewrite)

Options + FollowSymLinks RewriteEngine sur RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1




Haut