web-dev-qa-db-fra.com

Quels sont les redirections Apache htaccess les plus utilisées et les plus courantes?

Cette question est ici afin que nous puissions offrir aux utilisateurs qui recherchent des informations sur la manière de créer une ou plusieurs redirections courantes ou de base dans Apache à l'aide du fichier htaccess. Toutes les questions futures relatives à la recherche d'informations couvertes par la question devraient être fermées en double de cette question. Selon cette question Meta .

Quel est le point de cette question? L'idée non parfaite est répondez aux questions les plus fréquemment posées sur les redirections utilisant htaccess sur la plate-forme Apache, sur un type de lampe ou sur un serveur actif. Le type de réponses devrait être généralement celui qui, selon vous, est utilisé par 100 000 sites dans le monde entier, et que Pro Webmasters pose constamment sous les formes les plus fréquentes, sous différentes formes.

Quelques exemples du type de réponses que nous recherchons:

  • Comment puis-je rediriger des non-www vers www?
  • Comment puis-je rediriger un sous-domaine vers le domaine principal?
  • Comment puis-je rediriger un sous-dossier d'un domaine vers une racine ou un sous-domaine?
  • Comment puis-je rediriger une ancienne URL vers une nouvelle URL?

Quelques exemples des types de réponses que nous ne cherchons pas:

  • Réponses qui n'impliquent pas de redirection.
  • Toute réponse relative à NGinx, IIS ou à toute autre plate-forme non Apache.
  • Les réponses qui impliquent des suppressions de chaînes ou de requêtes personnalisées et complexes.

Ressources pour les règles Mod_Rewrite avancées à complexes:

Veuillez noter : cette question est toujours en construction et peut nécessiter certains affinant soit par moi-même, soit par un vrai modérateur de Pro Webmasters, si vous avez des préoccupations ou des questions veuillez utiliser la méta-page que j'ai faite il y a quelques jours ici .

5
Simon Hayter

Mod_alias et Mod_rewrite

Il existe 2 modules que vous pouvez utiliser dans htaccess pour contrôler les redirections. Ils sont appelés mod_alias et mod_rewrite . Pour vous aider à faire la différence ci-dessous, voici quelques commandes à familiariser lorsque vous utilisez mod_alias ou mod_rewrite.

Commandes mod_alias

Commandes mod_rewrite

mod_alias est considéré comme une méthode de redirection plus simple, tandis que mod_rewrite est considéré comme plus avancé et permet davantage de directives. Il convient de noter que les commandes mod_rewrite sont exécutées avant mod_alias.


Codes de redirection

  • 301 permanent
  • 302 Temporaire

Comment rediriger une ancienne URL vers une nouvelle URL?

Il existe plusieurs façons de rediriger une page vers une autre à l'aide de htaccess. 301 est généralement le plus important et le plus utilisé, car il nécessite le plus souvent des redirections permanentes et non temporaires. Les redirections permanentes sont idéales pour tenter de conserver les classements d'une page à l'autre.

301 Permanents

Redirect 301: Redirect 301 /old.html http://www.example.com/new-url/

RedirectPermanent: RedirectPerm /old.html http://www.example.com/new-url/

RedirectMatch: RedirectMatch 301 ^old.html$ http://www.example.com/new-url/

RewriteRule:

RewriteEngine On
RewriteBase /
RewriteRule ^old.html$ http://www.example.com/new-url/ [R=301,NC,L]

302 Temporary's

Redirect 302: Redirect 302 /old.html http://www.example.com/new-url/

RedirectTemp: RedirectTemp /old.html http://www.example.com/new-url/

RedirectMatch: RedirectMatch 302 ^old.html$ http://www.example.com/new-url/

RewriteRule:

RewriteEngine On
RewriteBase /
RewriteRule ^old.html$ http://www.example.com/new-url/ [R,NC,L]

Tout attraper et rediriger les non-www vers www

Vous devriez choisir d'utiliser mod_write pour rediriger toutes les demandes de versions non www de votre site, car la variable $ 1 capturera les noms de page. Ainsi, example.com/page1/ sera automatiquement redirigé vers www.example.com/page1/.

mod_rewrite:

RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]

mod_alias:

<If "%{HTTP_Host} != 'www.example.com'">
    Redirect permanent / http://www.example.com/
</If>

Tout attraper et rediriger www vers no-www

mod_rewrite:

RewriteEngine On
RewriteCond %{HTTP_Host} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com$1 [R=301,L]

mod_alias:

<If "%{HTTP_Host} != 'example.com'">
    Redirect permanent / http://example.com/
</If>

Tout attraper et rediriger www vers no-www (HTTPS)

RewriteEngine On
RewriteCond %{HTTP_Host} ^www.example.com$ [NC]
RewriteRule ^(.*)$ https://example.com$1 [R=301,L]

Appliquer TLS sur des pages spécifiques et désactiver au repos

Ce script supprime TLS sur toutes les autres pages, à l'exception de la page de connexion et de la page d'enregistrement. Vous pouvez en ajouter d'autres. Utilisez simplement | comme séparateur entre les noms de fichiers.

mod_rewrite:

RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/(login|register)\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_Host}/$1 [R=301,L]

Appliquer TLS sur tout le site

Si vous souhaitez appliquer TLS sur l'ensemble du site, vous pouvez utiliser mod_rewrite pour détecter HTTPS désactivé.

mod_rewrite:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} 

Suppression d'extensions d'une URL à l'aide de mod_rewrite

Certains hébergeurs Web peuvent exiger que Options -MultiViews dans votre htaccess supprime ces extensions, testez-le sans et si cela ne fonctionne pas, ajoutez-le simplement.

Supprimer le type d'extension PHP:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Supprimer le type d'extension HTML:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

Suppression du type d'extension HTM:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.htm [NC,L]

Ne fonctionne pas? Essayez ceci (remplacez php par l'extension de fichier que vous souhaitez supprimer):

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Supprimer et appliquer des barres obliques

Application:

Cela redirigera toutes les demandes sans un / final vers l'URL avec la barre oblique à la fin. (notez dans la deuxième partie de l’accolade les extensions de fichier à ignorer ... Dans la mesure où il n’a aucun sens de faire appliquer / à une URL d’image.

RewriteCond %{REQUEST_URI}  !\.(php|html?|jpg|gif)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_Host}/$1$2/ [L,R=301]

Suppression de:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.*)$
RewriteRule ^(.+)/$ http://www.example.com/$1 [R=301,L

Convertir les barres obliques inverses en barres obliques inversées

Cela convertira toutes les barres obliques inverses trouvées dans une URL en barres obliques. Bon pour éviter le contenu en double:

RewriteEngine On
RewriteCond %{REQUEST_URI} (.*)\\(.*)
RewriteRule .* %1/%2 [R=301]

Rediriger l'ancien domaine vers le nouveau domaine

RewriteEngine On

# Redirect Entire Site to New Domain
RewriteCond %{HTTP_Host} ^example.com$ [OR]
RewriteCond %{HTTP_Host} ^sub-domain.example.com$ [NC]
RewriteRule ^(.*)$ http://new-example.com/$1 [R=301,L]

Rediriger vers un nouveau domaine et supprimer un sous-dossier

RewriteEngine On

# Rename folder to match the sub folder you wish to remove  
RewriteCond %{HTTP_Host} ^(www\.)?example-old\.com$ [NC]
RewriteRule ^folder(/.*)?$ http://www.example-new.com$1 [L,R=301]
8
Simon Hayter