Aller au contenu
marmotte

Url-rewriting, .htaccess, directives dans iWal...je m'y perds !

Recommended Posts

marmotte    1

Bonjour à tous,

J'ai manifestement un pb d'url-rewriting, alors que le même fichier .htaccess fonctionnait à merveille chez mon ancien hébergeur.

.htaccess placé à la racine du dossier contenant les fichiers de mon site (/monsite.fr). Voici ce qu'il contient :

ErrorDocument 404 https://www.monsite.fr/erreur404.html

ErrorDocument 403 https://www.monsite.fr/erreur403.html

<Files "connex.php">
    deny from all
</Files>
<Files "foncts.php">
    deny from all
</Files>
<Files "config.php">
    deny from all
</Files>
<Files "php.ini">
    deny from all
</Files>

#--------------------------------------------------
# URL-REWRITING
#--------------------------------------------------

Options +FollowSymlinks

DirectoryIndex index.php
RewriteEngine on

RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^monsite.fr$
RewriteRule ^(.*)   https://www.monsite/$1  [QSA,L,R=301]

RewriteBase /

RewriteRule ^index\.html$ /index.php [L]

RewriteRule ^erreur\.html$ /erreur.php [L]

RewriteRule ^recherche\.html$ /recherche.php [L]

RewriteRule ^([0-9]*)/(.*)/([0-9]*)/(.*)/page/([0-9]*)\.html$ /categories.php?id_menu=$1&menu=$2&id_rubrique=$3&rubrique=$4&page=$5 [L]
RewriteRule ^([0-9]*)/(.*)\.html$ /page.php?id_menu=$1&menu=$2 [L]

RewriteRule ^article/([0-9]*)/(.*)/([0-9]*)/(.*)/([0-9]*)\.html$ /article.php?id_menu=$1&menu=$2&art=$3&url_art=$4&page=$5 [L]
RewriteRule ^article/([0-9]*)/(.*)/([0-9]*)/(.*)\.html$ /article.php?id_menu=$1&menu=$2&art=$3&url_art=$4 [L]
RewriteRule ^article\.html$ /article.php [L]

RewriteRule ^fiche/([0-9]*)/(.*)/art/([0-9]*)/(.*)\.html$ /fiche.php?id_menu=$1&menu=$2&art=$3&url_art=$4 [L]

RewriteRule ^liens\.html$ /liens.php [L]

RewriteRule ^contact\.html$ /contact.php [L]

RewriteRule ^mentions-legales-credits\.html$ /mentions.php [L]

RewriteRule ^plan-site\.html$ /sitemap.php [L]

A noter que les autres instructions fonctionnent parfaitement (http vers https, deny from all, ErrorDocument etc.), seule l'Url-rewriting des pages de mon site ne fonctionne pas, je n'ai même pas accès à ma page d'accueil (index.php) : que je tape www.monsite.fr, ou www.monsite.fr/index.php, ou www.monsite.fr/index.html dans le navigateur, j'ai toujours le même message de Firefox : "La page n’est pas redirigée correctement".

Par contre j'ai vu dans le iWal qu'il y a tout un tas de paramétrages (Alias, ErrorDocument, Redirections, ServeurAlias) dont je n'ai pas l'habitude (chez mon ancien hébergeur je paramétrais mon .htaccess, point barre !). C'est quoi tous ces trucs ? Est-ce que ces paramétrages (dont certains prédéfinis automatiquement lors de l'installation, comme DocumentRoot->HtDocs, Alias->CGI-bin) ne viendrait pas parasiter les instructions de mon .htaccess ???

Merci par avance pour l'aide que vous pourrez m'apporter, car là pour l'instant je patauge !!

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

Le meilleur moyen de tester si cela vient d'un réglage sur le manager, c'est retirer votre .htaccess et regarder si la redirection en boucle est toujours présente.

Les quatre lignes qui me font "peur" sont: 

RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^monsite.fr$
RewriteRule ^(.*)   https://www.monsite/$1  [QSA,L,R=301]

Pouvez-vous essayer en les retirant ?

Partager ce message


Lien à poster
Partager sur d’autres sites
marmotte    1

Bonjour Simon,

Effectivement si je retire ces 4 lignes, tous mes liens réécrits à l'intérieur des pages du site sont de nouveau valides et accessibles, merci !!

Par contre lors du premier accès au site, en tapant simplement www.monsite.fr (sans protocole http ni https) dans le navigateur, j'ai une indication de site non sécurisé (non https). Et une fois que je clique sur des liens internes, je suis bien à nouveau en https. Why ???

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 3 heures, marmotte a dit :

Par contre lors du premier accès au site, en tapant simplement www.monsite.fr (sans protocole http ni https) dans le navigateur, j'ai une indication de site non sécurisé (non https). Et une fois que je clique sur des liens internes, je suis bien à nouveau en https. Why ???

Ce n'est pas le serveur web qui décide si les liens sont ou non en HTTPS mais le site lui-même.

Vous pouvez forcer depuis le manager l'utilisation du HTTPS, cela redirigera le visiteur s'il arrive en HTTP.

Partager ce message


Lien à poster
Partager sur d’autres sites
marmotte    1

OK, dans le manager j'ai donc choisi le mode de publication conseillé "http et https", puis via .htaccess je n'avais plus qu'à garder

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

pour forcer systématiquement mondomaine.fr en WWW.mondomaine.fr

et tout est OK maintenant, on arrive systématique sur mon site en www. et sécurisé, merci Simon !

Par contre j'ai encore qq petites interrogations par rapport au manager :

- j'ai à peu près compris la finalité de la directive "DocumentRoot", mais ne fait-elle pas double-emploi avec (ou ne vient-elle pas parasiter) mon .htaccess ?

- la directive "Alias->cgi-bin", ça sert à quoi en fait ?? Pourquoi on ne peut pas supprimer cette directive (surtout que j'ai supprimé le dossier /cgi-bin correspondant sur le serveur, sans dommage pour le fonctionnement de mon site) ?

- de même, j'ai une directive "ServeurAlias->www" : en quoi est-elle utile au juste ? Et cette directive ne se télescope-t-elle pas aussi avec mon .htaccess ?

Merci @+

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 3 heures, marmotte a dit :

OK, dans le manager j'ai donc choisi le mode de publication conseillé "http et https", puis via .htaccess je n'avais plus qu'à garder


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

pour forcer systématiquement mondomaine.fr en WWW.mondomaine.fr

et tout est OK maintenant, on arrive systématique sur mon site en www. et sécurisé, merci Simon !

Plus simple encore : "HTTP redirige vers HTTPS", cela vous évitait une règle htaccess :)

Il y a 3 heures, marmotte a dit :

- j'ai à peu près compris la finalité de la directive "DocumentRoot", mais ne fait-elle pas double-emploi avec (ou ne vient-elle pas parasiter) mon .htaccess ?

Non, le DocumentRoot indique où sont situés les fichiers du site (var/www/[nom du domaine]/htdocs par défaut). Le htaccess ne rentre en compte qu'ensuite.

Un cas d'usage fréquent est lorsque deux noms de domaine partagent les même fichiers.

Il y a 3 heures, marmotte a dit :

- la directive "Alias->cgi-bin", ça sert à quoi en fait ?? Pourquoi on ne peut pas supprimer cette directive (surtout que j'ai supprimé le dossier /cgi-bin correspondant sur le serveur, sans dommage pour le fonctionnement de mon site) ?

Si le dossier n'existe plus, pas à grand chose :P Elle est un peu particulière car cgi-bin est le seul répertoire où il est possible de mettre des scripts CGI, ils ne seront pas exécutés ailleurs.

Aucun impact sur le fonctionnement du site sinon.

Il y a 3 heures, marmotte a dit :

- de même, j'ai une directive "ServeurAlias->www" : en quoi est-elle utile au juste ? Et cette directive ne se télescope-t-elle pas aussi avec mon .htaccess ?

Elle indique que la configuration web est la même pour nomdedomaine.fr et www.nomdedomaine.fr : même emplacement des fichiers, même certificat SSL, etc.

Il faudrait sinon créer deux domaines distincts (nomdedomaine.fr et www.nomdedomaine.fr) et répéter la configuration.
On laisse la possibilité de l'enlever dans le cas où www.nomdedomaine.fr aurait droit à une configuration web distincte, ce qui arrive rarement.

A noter que ServerAlias ne s'applique qu'à la partie web, l'avoir ne signifie pas qu'un mail envoyé à toto@www.nomdedomaine.fr tombera dans la même boîte que toto@nomdedomaine.fr (par exemple).

Partager ce message


Lien à poster
Partager sur d’autres sites
marmotte    1
Il y a 2 heures, Simon DUJANCOURT a dit :

Plus simple encore : "HTTP redirige vers HTTPS", cela vous évitait une règle htaccess :)

Ca ne marche pas chez moi : j'avais essayé ce mode de publication, mais en tapant seulement "mondomaine.fr" il n'y avait pas de redirection vers WWW.mondomaine.fr (seulement vers https), d'où ma règle .htaccess que je dois conserver, du coup !

 

Il y a 2 heures, Simon DUJANCOURT a dit :

Non, le DocumentRoot indique où sont situés les fichiers du site (var/www/[nom du domaine]/htdocs par défaut). Le htaccess ne rentre en compte qu'ensuite.

Donc la directive DocumentRoot remplace la règle .htaccess "RewriteBase", ou je me trompe ?

 

Il y a 2 heures, Simon DUJANCOURT a dit :

Si le dossier n'existe plus, pas à grand chose :P Elle est un peu particulière car cgi-bin est le seul répertoire où il est possible de mettre des scripts CGI, ils ne seront pas exécutés ailleurs.

OK compris... je n'ai de toute façon aucun script CGI dans mon site

 

Il y a 2 heures, Simon DUJANCOURT a dit :

Elle indique que la configuration web est la même pour nomdedomaine.fr et www.nomdedomaine.fr : même emplacement des fichiers, même certificat SSL, etc.

OK, donc directive à garder dans mon cas, merci !

Plus généralement merci beaucoup à toi Simon, et aussi à toute la team Yulpa (que j'ai déjà embêtée plusieurs fois via mon manager) pour sa disponibilité et sa compétence, et aussi pour toutes les prestations proposées dans vos forfaits hébergement. Ca fait du bien d'arriver chez un hébergeur comme ça !! ;)

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, marmotte a dit :

Ca ne marche pas chez moi : j'avais essayé ce mode de publication, mais en tapant seulement "mondomaine.fr" il n'y avait pas de redirection vers WWW.mondomaine.fr (seulement vers https), d'où ma règle .htaccess que je dois conserver, du coup !

Effectivement, cette option du manager ne s'occupe de faire que HTTP -> HTTPS.

Il y a 1 heure, marmotte a dit :

Donc la directive DocumentRoot remplace la règle .htaccess "RewriteBase", ou je me trompe ?

Non. RewriteBase définit le répertoire de base pour les règles de réécriture où chercher les fichiers. Exemple :

# var/www/monsite.fr/htdocs/myapp/.htaccess

RewriteEngine On
RewriteBase /pages/
RewriteRule ^index\.html$  welcome.html

# Est équivalent à :

RewriteEngine On
RewriteRule ^index\.html$ /pages/welcome.html

La règle permet ici d'afficher le contenu du fichier welcome.html situés dans un dossier pages (chemin complet : var/www/monsite.fr/htdocs/pages/welcome.html) lorsque le visiteur se rend sur http://monsite.fr/myapp/index.html sans avoir à répéter /pages/ à chaque fois.

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteBase

Citation

[DocumentRoot] permet de définir le répertoire à partir duquel [apache] va servir les fichiers.

http://httpd.apache.org/docs/2.2/mod/core.html#DocumentRoot

Il y a 2 heures, marmotte a dit :

Plus généralement merci beaucoup à toi Simon, et aussi à toute la team Yulpa (que j'ai déjà embêtée plusieurs fois via mon manager) pour sa disponibilité et sa compétence, et aussi pour toutes les prestations proposées dans vos forfaits hébergement. Ca fait du bien d'arriver chez un hébergeur comme ça !! ;)

Merci :)

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant


×