IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Fichier .htaccess et sous-domaine


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Fichier .htaccess et sous-domaine
    Bonjour,

    J'espère poster au bon endroit mais je n'en suis pas sûr. Merci de déplacer mon message s'il est mieux ailleurs.

    J'essaye de rajouter un sous-domaine à mon site internet afin d'avoir par exemple "http://fr.monsite.net/index.php" au lieu de "http://www.monsite.net/fr/index.php". Le sous-domaine a été ajouté par mon hébergeur.

    Pour le moment "http://www.monsite.net/fr/index.php" redirige vers "http://www.monsite.net/index.php?pw=fr" grâce au htaccess.

    Le fichier htaccess dans le répertoire fr est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
    RewriteRule ([a-z].*).php ../$1.php?pw=fr [L]
    RewriteRule ([a-z].*) ../$1
    Le 1er RewriteRule est pour les pages php et le 2ème pour les fichiers autres que les fichier *.php (tout les fichiers commencent par une lettre minuscule)

    Par contre "http://fr.monsite.net/index.php" fait une belle erreur 500
    J'ai fait un test avec le fichier htaccess suivant et là ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteEngine on
    RewriteRule ([a-z].*).php http://www.monsite.net/$1.php?pw=fr [L]
    Par contre j'affiche par exemple l'adresse "http://www.monsite.net/index.php?pw=fr" dans le navigateur.

    J'ai un peu de mal avec les fichiers htaccess donc je fais sans doute des erreurs. Que faut-il mettre dans le htaccess pour que "http://fr.monsite.net/index.php" redirige vers "http://www.monsite.net/index.php?pw=fr" et qu'il affiche bien "http://fr.monsite.net/index.php" dans le navigateur ?

    J'ai aussi 2 autres questions pour améliorer la 1ère version:
    1) Mon 1er htaccess est-il bien adapté ou peut-il être amélioré pour les images et fichiers css qui sont utilisé comme ceci dans le fichier php ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <link rel="icon" type="image/png" href="./image/icone.png" />
        <link rel="stylesheet" type="text/css" href="style.css" />
        <link rel="stylesheet" type="text/css" href="menu.css" />
    2) J'avais mis en plus du fichier htaccess un fichier index.php dans le répertoire fr pour ne pas avoir de problème lorsqu'on essaye d'afficher "http://www.monsite.net/fr/" sinon cela faisait une erreur 404. N'y a-t-il pas plus simple.

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Ton premier .htaccess part dans la bonne direction mais il est incomplet. En fait, la seconde règle est toujours appliquée contrairement à ce qu'on pourrait croire notamment à cause du flag L dans la première règle. C'est parce qu'Apache ne joue pas qu'une seule fois les règles ; il les joue autant de fois que nécessaire jusqu'à arriver à une URL qui n'est plus réécrite. Dans ton cas, le rejeu des règles active systématiquement la seconde règle.

    Pour bloquer clairement la règle 2 et faire en sorte qu'elle ne s'active que pour les fichiers non PHP, il faut ajouter une condition juste avant cette règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !\.php$

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci.
    Je viens de faire un test, ça ne rajoute pas de bug C'est donc changé.

    Mais pourquoi cette ligne bloque la règle 2?
    Si l'adresse est "http://www.monsite.net/fr/index.php", REQUEST_URI correspond bien à "/index.php" ? Et on le compare bien à .php ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !\.php$
    J'ai vraiment du mal avec les redirection ... Il va falloir que je me plonge dans une bonne documentation pour tout comprendre

    Concernant la dernière question, il doit faire un 404 car il ne trouve ni "index.html", ni "index.php" dans le dossier.
    Je me demandais s'il n'était pas possible de faire une règle redirigeant le "http://www.monsite.net/fr/index.html" ou "http://www.monsite.net/fr/index.php" vers "http://www.monsite.net/index.php" ?

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    J'avoue ne rien avoir compris à tes explications et ta dernière question me semble être la même que la question initiale

    Bref, si je reprends à ma sauce, j'ai le .htaccess suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    RewriteEngine on
     
    # Remplacer les ... ci-dessous par la liste des codes de langue supportés
    RewriteRule (fr|en|...)/([a-z].*)\.php$ ../$2.php?pw=$1 [L]
     
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule ([a-z].*) ../$1 [L]
     
    # Pour les sous-domaines
    # Remplacer les ... ci-dessous par la liste des codes de langue supportés
    RewriteCond %{HTTP_HOST} ^(fr|en|...)\.monsite\.net
    RewriteRule ([a-z]*)\.php /$1.php?pw=%1 [L]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    J'avoue ne rien avoir compris à tes explications et ta dernière question me semble être la même que la question initiale

    Bref, si je reprends à ma sauce, j'ai le .htaccess suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    RewriteEngine on
     
    # Remplacer les ... ci-dessous par la liste des codes de langue supportés
    RewriteRule (fr|en|...)/([a-z].*)\.php$ ../$2.php?pw=$1 [L]
     
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule ([a-z].*) ../$1 [L]
     
    # Pour les sous-domaines
    # Remplacer les ... ci-dessous par la liste des codes de langue supportés
    RewriteCond %{HTTP_HOST} ^(fr|en|...)\.monsite\.net
    RewriteRule ([a-z]*)\.php /$1.php?pw=%1 [L]
    Ben si je vais sur ""http://www.monsite.net/fr" le serveur va chercher le fichier "http://www.monsite.net/fr/index.html" et redirige vers "http://www.monsite.net/index.html" et fini en erreur car il n'existe pas. Mais en fait c'est une erreur 403 donc c'est pas ça ...

    En tout cas si je rajoute ceci dans le htaccess ça ne me fait pas d'erreur 403 et affiche la bonne page mais en indiquant l'adresse complete ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule index.html http://www.monsite.net/index.php?pw=fr [L]
    Ton htaccess ne fonctionne pas
    Forbidden

    You don't have permission to access / on this server.

    Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
    Tu n'avais pas dit que la ligne suivante permettait de ne pas faire la suite?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !\.php$
    Donc pourquoi tu l'utilise puis plus loin tu utilises "RewriteRule" avec un fichier se finissant par php ?


    Mais vu que c'est une erreur Forbidden (donc 403) le problème viens peut être d’ailleurs ?

    Pour précision (c'est peut être utile), le fichier htaccess se trouve dans le sous-répertoire fr

    [Edit] Si je met ça dans le htaccess du répertoire fr, la redirection fonctionne dans ce sens sans erreur "http://fr.monsite.net/index.php" => "http://www.monsite.net/de/index.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine on
    RewriteRule (.*).php http://www.monsite.net/de/$1.php [L]
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule (.*) http://www.monsite.net/$1 [L]
    Bon par contre "http://fr.monsite.net/" renvoie vers ""http://www.monsite.net/"
    Dernière modification par Invité ; 29/03/2013 à 00h01.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Citation Envoyé par Beginner.j Voir le message
    En tout cas si je rajoute ceci dans le htaccess ça ne me fait pas d'erreur 403 et affiche la bonne page mais en indiquant l'adresse complete ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule index.html http://www.monsite.net/index.php?pw=fr [L]
    C'est normal, c'est parce que tu as mis http://... dans le second paramètre de RewriteRule. Si tu le retires et après purge du cache du navigateur, ça devrait aller mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule index.html /index.php?pw=fr [L]
    Citation Envoyé par Beginner.j Voir le message
    Tu n'avais pas dit que la ligne suivante permettait de ne pas faire la suite?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !\.php$
    Non, j'ai dit que ça bloquait la règle 2. Relis la doc Apache : les RewriteCond servent à conditionner la RewriteRule qui se trouve immédiatement après, elles n'ont pas de portée "globale", elles ne s'appliquent qu'à une seule règle (RewriteRule). C'est pour ça que je la met une seconde fois.


    Citation Envoyé par Beginner.j Voir le message
    Pour précision (c'est peut être utile), le fichier htaccess se trouve dans le sous-répertoire fr
    Ca change tout : j'avais écrit mon .htaccess en supposant qu'il se trouvait à la racine du site, d'où les (fr|en|...). Si c'est dans le répertoire fr, ce filtre n'a absolument aucun intérêt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Architecture de fichiers, htaccess et sous domaine
    Par biibox dans le forum Apache
    Réponses: 2
    Dernier message: 24/03/2012, 09h12
  2. [.htaccess] Accès sous-domaine
    Par Blinkers dans le forum Apache
    Réponses: 3
    Dernier message: 18/10/2011, 22h17
  3. htaccess et sous-domain
    Par gotcha5832 dans le forum Apache
    Réponses: 8
    Dernier message: 13/07/2011, 19h09
  4. Réponses: 1
    Dernier message: 26/01/2009, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo