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:
Quelques exemples des types de réponses que nous ne cherchons pas:
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 .
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.
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]
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>
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>
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.example.com$ [NC]
RewriteRule ^(.*)$ https://example.com$1 [R=301,L]
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]
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}
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]
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
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]
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]
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]