Appliquer une condition à plusieurs règles de réécriture

  Information

Une directive RewriteCond ne s'appliquant qu'à la RewriteRule qui suit immédiatement, il est parfois gênant de devoir répéter une condition plusieurs fois. Cela alourdit le fichier .htaccess pour rien. 

Pour éviter cette contrainte il est possible d'utiliser une astuce qui consiste à inverser la condition pour ne pas appliquer nos règles de réécriture. Nous utiliseront pour cela le Flag SKIP qui permet de sauter un certain nombre de règles de réécriture (en fonction du nombre en paramètre). 

Grâce à ce type d'écriture il est même possible de simuler une structure IF - ELSE en utilisant une deuxième réécriture avec le drapeau SKIP.

Nous allons voir un exemple qui permet de n'appliquer des redirections que si le nom de domaine correspond à une ancienne version du site. Dans ce cas là nous redirigerons vers la bonne page sur le nouveau site. Ce cas est utile quand les deux domaines pointent vers le même répertoire et donc partagent le même fichier .htaccess.

  code source classé dans  .HTACCESS

 
 01    
 02    
 03    
 04    
 05    
 06    
 07    
 08    
 09    
 10    
 11    
 12    
 13    
 14    
 15    
 16    
 17    
 18    
 19    
 20    
 21    
 22    
 23    
 24    
 25    
 26    
 27    
 28    
 29    
 30    
 31    
 32    
 33    
 34    
 35    
 36    
 37    
 38    
 39    
                               
/*
Titre : Appliquer une condition à  plusieurs règles de réécriture

URL : https://phpsources.net/code_s.php?id=807
Auteur : forty
Website auteur : http://www.toplien.fr/
Date édition : 03 Juil 2012
Date mise a jour : 13 Aout 2019

Rapport de la maj:
- correction du code
*/
/*---------------------------------------------------------------*/
# Si le nom de domaine est différent de l'ancien site
RewriteCond %{HTTP_HOST} !^www\.old-site\.fr$
# Alors saute les 3 règles suivantes
RewriteRule .* - [S=3]
# Ces 3 règles ne sont appliquées que si le domaine correspond à 
l'ancien site
RewriteRule ^/url_old-1.html http://www.new-site.fr/url_new-1.html [NC,R=301]
RewriteRule ^/url_old-2.html http://www.new-site.fr/url_new-2.html [NC,R=301]
RewriteRule ^/url_old-3.html http://www.new-site.fr/url_new-3.html [NC,R=301]
# Fin du IF

#Avec une structure IF - ELSE :
# Si le nom de domaine est différent de l'ancien site
RewriteCond %{HTTP_HOST} !^www\.old-site\.fr$ [NC]
# Alors saute les 4 règles suivantes (les 3 redirections + le SKIP)
RewriteRule .* - [S=4]
# Ces 3 règles ne sont appliquées que si le domaine correspond à 
l'ancien site
RewriteRule ^/url_old-1.html http://www.new-site.fr/url_new-1.html [R=301]
RewriteRule ^/url_old-2.html http://www.new-site.fr/url_new-2.html [R=301]
RewriteRule ^/url_old-3.html http://www.new-site.fr/url_new-3.html [R=301]
# Cette règle permet de sauter la règle de réécriture du ELSE
RewriteRule .* - [S=1]
# Sinon applique cette règle
RewriteRule ^(.*)$ /index.php?file=$1 [L]
# Fin du IF - ELSE

   Un petit merci aux auteurs pour leur travail, ça ne coûte rien et ça fait toujours plaisir wink

[1]

  • avatar

    Benji54

    11 Aout 2018 à 17:10

     Merci


 Autres snippets qui pourraient vous intéressez

Insère un élément dans un tableau a une place donnée

Compatibilité : PHP 5, PHP 7, PHP 8

Insère un élément dans un tableau selon la clé. La fonction accepte les tableaux uniquement avec des clés numériques.

Urlrewriting avancé - Réécriture des URL

Compatibilité : PHP 5, PHP 7, PHP 8

Fonction qui permet de réécrire les URL en remplaçant tous les caractères spéciaux et les accents par un tiret (-)

Urlrewriting basique - Réécriture des urls

Compatibilité : PHP 5, PHP 7, PHP 8

Fonction simple qui réécrit une url en friendly url. Cette fonction ne prend pas en compte les caractères spéciaux.

Plusieurs utilisations de la fonction PHP include ()

Compatibilité : PHP 5, PHP 7, PHP 8

Plusieurs utilisations de la fonction PHP include (), apprenez a passer vos variables dans vos include ()

Optimiser une chaine pour la réécriture d'URL

Compatibilité : PHP 5, PHP 7, PHP 8

Fonction pour optimiser une chaine de caractère afin de faire de la réécriture d'url et d'avoir de jolies urls.

* Requêtes exécutées avec Recherche Contextuelle

  Derniers scripts PHP / MySQL

TwitterOAuth PHP Library pour API REST de Twitter 8.1.1

Script PHP / MySQL
Langue langue en
Date 08 Fév 2026
Taille 0.03 Mo
Catégorie Social-network

DokuWiki 2025-05-14b

logo DokuWiki
Langue langue en
Date 07 Fév 2026
Taille 4 Mo
Catégorie Wiki

WordPress 6.4.1

logo WordPress
Langue langue fr
Date 05 Fév 2026
Taille 34 Mo
Catégorie Blogs

PrestaShop 9.0.2-2.1

logo PrestaShop
Langue langue fr
Date 02 Fév 2026
Taille 116 Mo
Catégorie Ecommerce
avatar

Forty

  03 Juil 2012

  SOURCE   Télécharger

Information sur les mises à jour

Dernière mise à jour :

    13 Aout 2019
    correction du code

14 206 Vues
Compatibilité du code
PHP 5, 7 et 8+
avatar
58 codes

Catégorie :  .HTACCESS

Ajouter un logo en filigrane sur vos images et vos photos
Anti spam à partir des urls qui spamment
Appliquer une condition à plusieurs règles de réécriture
Augmenter les performances avec AllowOverride
Autoriser l'accès qu'a certaines extensions
Blocage d'une adresse IP avec le fichier .htaccess
Bloquer des sites qui spam - version php et .htaccess
Bloquer l'accès à certaines extensions de fichier
Bloquer les user agent (navigateur) indésirables
Comment mettre du code php avec une extension html
Compression automatique des pages
Corriger automatiquement les petites erreurs de saisie des urls
Définir le charset par défaut
Désactiver l'option MultiViews : une url est accessible avec et sans extension
Déplacer une arborescence sur une autre url
Désactiver la signature du serveur
Empêche une réécriture de boucler
Empêcher l'accès avec www.
Eviter de recharger des pages statiques en indiquant une expiration dans 100 ans
Faire une réécriture ou une redirection que si la requête ne correspond pas à un répertoire existant
Faire une réécriture ou une redirection que si le fichier n'existe pas
Faire une réécriture ou une redirection que si le fichier existe
Force la redirection en HTTPS
Forcer l'accès en français si aucune langue n'est sélectionnée
Forcer la redirection de index.html vers /
Gérer l'accès au site selon l'heure
Gestion de cache par fichier .htaccess
Interdire l'accès à un répertoire sans fichier index
Interdire l'affichage de vos images sur un autre site
Maitriser l'affichage du contenu du répertoire en cas d'absence d'index
Mettre les images, flash,... en cache plus longtemps
Modifier le type MIME (Content-Type) pour un flux rss
Obliger l'accès avec index.php et rediriger l'accès par /
Protéger un répertoire avec un mot de passe chez FREE
Protection contre les attaques de hacker avec register global on
Protection d'un répertoire avec un mot de passe
Réécrire des sous-domaines vers le domaine principal avec une variable
Réécriture de sous-domaine vers un répertoire du domaine principal
Règle de réécriture avec plus de 9 paramètres
Réécriture si la requete ne correspond pas à 1 répertoire
Recevoir un mail quand vos photos sont affichées sur un site inconnu
Redirection d'un ancien nom de domaine vers un nouveau nom de domaine
Redirection d'un répertoire vers un sous domaine
Redirection d'une arborescence vers une page unique
Redirection https vers http ou http vers https, redirection page sécurisée SSL/TLS
Redirection massive avec le sous domaine (www)
Redirection pour une maintenance de votre site
Redirige tout un repertoire d'un domaine principale vers un sous-domaine
Rediriger la racine d'un site vers un répertoire
Rediriger tout en gardant l'url d'origine
Rediriger tout un répertoire vers la racine
Rediriger un domaine vers un autre et suivre dans Google analytics
Rediriger une page vers une url contenant la date du jour
Referrer bloquer le spam
Renommer l'url et les paramètres avec une redirection 301
Substituer vos images si elles sont affichées sur un autre site
Tester les réécritures d'url en local sur un PC avec WampServer
Tracking des liens du bouton J'aime de Facebook dans Analytics