Partage

[Tutorial] Fichier .htaccess et ses fonctions, URL

Configurer son serveur et rediriger les adresses avec le .htaccess

10 mars 2017 à 20:30:39

Bonjour,

J’ai tellement galéré pour mettre mon site en ligne (sur OVH), que je partage avec vous mes trouvailles.

Le fichier .htaccess permet de configurer le serveur et notamment :

  • De définir la sécurité des dossiers
  • Renvoyer les adresses .fr vers .com
  • Renvoyer les adresses monsite.com vers www.monsite.com

  • Renvoyer les adresses http vers https
  • De réécrire les URL (URL rewriting)
  • De rediriger les utilisateurs et les moteurs de recherche en cas de changement d’adresse pour une page
  • De donner des informations au navigateur sur le temps de conservation des fichiers temporaires ()

Il est lu par les serveur à chaque requête, donc mieux vaut éviter de raconter sa vie dedans.

Il consiste en un petit fichier, sans nom, avec l’extension .htaccess.
Plusieurs doivent être créés pour chaque dossier.
Nous allons ici aborder le fichier à placer dans le dossier racine du site.

Commençons par ouvrir Notepad++,
dans le menu encodage, choisissez Encoder en ANSI.

Faites Fichier -> Enregistrer sous -> Dossier racine du site.
Nom du fichier, entrez .htaccess (avec le point). Laissez l’extension en .txt.

1)Protéger le fichier

Entrez ce code pour empêcher son édition à distance.

<files .htaccess>
order allow,deny
deny from all
</files>



Rediriger son site .fr ou .org vers le .com

On commence par ajouter ces lignes :

Cec active le module Apache du serveur pour assurer les redirections.

RewriteEngine on
Options +FollowSymlinks


Vous devez aussi savoir que pour les moteurs de recherche, www.monsite.com et monsite.com, ce n'est pas la même chose. Idem pour monsite.fr et monsite.com.

Ensuite on ajoute :

RewriteCond   %{HTTP_HOST}    ^(www\.)?monsite\.org [OR,NC]


Pour rediriger le .fr, vous aurez compris, on écrit :

RewriteCond   %{HTTP_HOST}    ^(www\.)?monsite\.fr [OR,NC]


Puis on déclare le site de référence, avec :

RewriteRule   ^(.*)$    https://www.monsite.com/$1    [L,R=301]



3)Rediriger de monsite.com vers www.monsite.com

Pour Google, les 2 ne sont pas les mêmes !!! Il va considérer les 2 adresses comme différentes, considérer ça comme du contenu dupliqué et paf, vous coller en bas des résultats. Google DÉTESTE le « duplicate content » !
On va donc rediriger tout vers www.monsite.com, ou l’inverse, mais décidez-vous.
On ajoute

RewriteCond    %{HTTP_HOST}    ^(www\.)?monsite\.com$    [OR,NC]


et si vous ne l’avez pas déjà, la ligne

RewriteRule   ^(.*)$   https://www.monsite.com/$1   [L,R=301]



4)Afficher de belles URL

Très important pour le SEO, vous ne devez pas avoir des adresses qui s’appellent monsite.com/hotel ?city=22225&client=2225 mais plutôt monsite.com/hotel/paris.
C’est plus délicat mais essentiel.
1er exemple simple : j’écris comme lien <a href= ‘/mapage’> et je veux que ça aille chercher mapage.php.
Le code d’écriture est le suivant :

RewriteRule   mabelleURL$          lenomdufichierdelapage.php     [L]



Exemple simple : accueil$accueil.php[L]
ou RewriteRule resultats$vueResultats.php[L]
ou RewriteRule virement-urssaf$vueURSSAF.php[L]

Niveau 2. Rediriger avec des paramètres.
Imaginons un site de quiz. Je veux qu’un bouton Activité physique ouvre un quiz sur l’activité physique.
Mon bouton est : <a href=’ /quiz/activite’>Quiz sur l’activité physique</a>.
J’écris ensuite en .htaccess :

RewriteRule   quiz/([a-zA-Z0-9]+)$            vueQuiz.php?theme=$1              [L]



Explications : ce qui est entre parenthèses est passé en argument à la page dans $1. Ici, il s’agit d’une expression régulière, qui nécessite 1 ou + chiffre ou lettre.
Mon href passe l’argument activite, qui est autorisé par la regex [a-zA-Z0-9]+ -> le serveur reçoit donc vueQuiz.php?theme=activite, et me l’affiche en écrivant monsite.com/quiz/activite.

On peut passer autant de paramètres que l’on veut. Chaque variable doit être placée entre parenthèses, puis récupérée avec $1, $2, $3, etc. dans l’URL réécrite, par ordre d’apparition.
Googlez pour en savoir +.

5)Rediriger un changement de page

Google déteste aussi tomber sur des pages d’erreur.
Quand vous changez l’URL de pages déjà indexée, utilisez la redirection avec le schéma :

RedirectPermanent   /ancienne-url   http://www.monsite.com/nouvelle-url




Ex : RedirectPermanent /vueHotels.php http://www.monsite.com/hotels

6)Gagner du temps de chargement en conservant les données en cache (Expires caching)

Une page s’affichant rapidement gagne des points. Google n’aime pas des temps de chargement supérieurs à 2 secondes.

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/jpeg "access 1 month"
ExpiresByType image/png "access 1 month"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType application/javascript "access 1 month"
ExpiresByType application/x-javascript "access 1 month"
ExpiresByType image/x-icon "access 1 month"
ExpiresDefault "access 1 month"
</IfModule>

7)Gagner du temps de chargement en comprimant les données transférées, décodées ensuite par votre navigateur (Deflate compression, gzip)
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
# Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
</IfModule>

8)Gérer les erreurs client ou serveur 404 & autres

Suivez le tuto OpenClassrooms sur la création d’une page 404.
Ensuite, ajoutez au .htaccess :
ErrorDocument 400 /erreur.php?erreur=400
ErrorDocument 401 /erreur.php?erreur=401
ErrorDocument 402 /erreur.php?erreur=402
ErrorDocument 403 /erreur.php?erreur=403
ErrorDocument 404 /erreur.php?erreur=404
ErrorDocument 405 /erreur.php?erreur=405
ErrorDocument 500 /erreur.php?erreur=500
ErrorDocument 501 /erreur.php?erreur=501
ErrorDocument 502 /erreur.php?erreur=502
ErrorDocument 503 /erreur.php?erreur=503
ErrorDocument 504 /erreur.php?erreur=504
ErrorDocument 505 /erreur.php?erreur=505

9)Améliorez vos scores de vitesse de chargement avec GTmetrix : http://gtmetrix.com

Voilà, j'espère que ça vous aidera.
A+

-
Edité par djibe89 11 avril 2017 à 16:26:30

Vous êtes demandeur·se d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur·se web junior

Je postule
Formation
courte
Financée
à 100%
16 mai 2018 à 3:26:08

Bonjour,

Dans mon .htaccess, l'URL est automatiquement transformé en https. Je souhaiterai pouvoir ne pas appliquer cette transformation à un fichier php. C'est à dire que lorsque je pointe sur la page : print_doc.php, mon URL s'affiche en http et non pas en https.

Pouvez-vous m'aider SVP ?

Cordialemet

Staff 16 mai 2018 à 9:11:57

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage

Citation des règles générales du forum :

Avant de poster, demandez-vous si ce que vous allez dire apporte quelque chose au sujet. Si votre message n'apporte rien, vous ferez perdre du temps à tout le monde et le sujet pourrait dévier ou devenir difficile à suivre.

Aussi, vérifiez la date du topic. Le déterrage de topic nuit au bon fonctionnement du forum et est interdit. Utilisez les boutons pouce en haut pour dire merci. Si le topic date de plus de deux mois sans réponses, mieux vaut ne pas répondre. Si vous avez une question similaire, créez plutôt votre propre sujet en détaillant votre contexte

Je ferme ce sujet. Me contacter par MP si besoin.

Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça :) Postez votre code html et css (bouton '</>') !!