Besoin de rediriger tout le trafic vers https

Je veux rediriger tout le trafic qui va à http://example.com à https://example.com

De Même pour http://example.com/about à https://example.com/about

Je pensais que ce serait quelque chose comme ceci:

RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
25
demandé sur animuson 2010-07-13 21:29:44

5 réponses

Cela fonctionne pour moi:

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

Si le trafic arrive sur HTTP non-SSL, redirigez-vous vers L'équivalent HTTP de la page à laquelle l'utilisateur essayait d'accéder à l'origine. Il n'implique pas non plus d'options mod_rewrite, il est donc facile à lire.

Diatribe latérale: pourquoi tout le monde ressent-il le besoin de définir explicitement le code HTTP de la redirection et de marquer l'une de leurs réécritures comme la "dernière"? Sérieusement, j'ai vu des dizaines de règles htaccess de même apparence dans les derniers jour.

61
répondu Borealid 2010-07-13 17:39:47

Ceci est une réponse précédente utilisant .htttaccess mais en ajoutant des changements proposés dans les commentaires, et certains de moi:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://my.domain.name%{REQUEST_URI} [L,R=301]

Notes:

  • C'est pour le cas où l'utilisateur n'a pas accès à la configuration principale, mais a accès .les règles htaccess. Si vous avez accès à la configuration principale, utilisez la solution mod_alias à la place .
  • pour moi, la règle n'a pas été reprise sans définir RewriteBase. Définir explicitement il se débarrasse de l'ambiguïté avec certains les configurations de serveurs.
  • , Au moins sur certaines configurations, %{HTTPS} n'est pas définie sur off lors de l'utilisation de http, mais est null, !on est plus fiable de la règle de off.
  • pour le nom d'hôte explicite, vous ne comptez pas sur l'en-tête D'hôte côté client ou la configuration du serveur. Cependant, le nom d'hôte explicite suppose naturellement qu'il n'y a qu'un seul domaine à rediriger. Host header pose des problèmes considérables, tels que contenir le port et être des données fournies par le client. Une autre alternative, comme suggéré par Apache Wiki , est d'utiliser %{SERVER_NAME}. Si vous envisagez de l'utiliser, consultez la mise en garde de cette discussion - elle repose sur une autre configuration correcte.
  • R=301 signifie que c'est une redirection permanente, comme c'est généralement censé l'être dans ce cas. Si vous pensez plutôt que c'est temporaire, cela peut être omis ou spécifié comme R=302.
  • L signifie que c'est la dernière règle à être appliquée pour cette requête. Laissez le si vous soupçonnez Ou savez qu'il y a d'autres règles Après cela que vous ne voulez pas obtenir appliquer. Vous pouvez supprimer si c'est la seule règle du fichier.
12
répondu eis 2018-02-09 09:18:35

Selon la documentation Apache , l'utilisation de mod_alias est plus appropriée que mod_rewrite pour cette tâche. C'est-à-dire, afin de rediriger tout le trafic HTTP vers HTTPS, on pourrait:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost >

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost >

Deux choses à noter sur cette configuration:

  1. Vous devez accéder au fichier de configuration du serveur principal pour que cette configuration fonctionne. La directive VirtualHost n'est valide que dans le contexte" configuration du serveur".
  2. gardez à l'esprit que les directives mod_rewrite sont traitées avant mod_alias directives. Si vous avez déjà un bloc massif de RewriteRules dans votre fichier .htaccess, vous pourriez être mieux avec la configuration mod_rewrite.
7
répondu t-richards 2015-01-13 20:29:46

Pourquoi pas tout simplement?

rewriteCond %{HTTPS} !on
rewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Cela a fonctionné pour moi, et me semble clair. Acclamation.

1
répondu Andres Felipe 2018-05-11 12:45:21

Après quelques recherches, ce qui a fonctionné pour moi, une version un peu différente.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
0
répondu Fabio de Oliveira 2018-09-28 08:20:29