JeuWeb - Crée ton jeu par navigateur
[Résolu]Réécriture d'url et chemins absolus - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu]Réécriture d'url et chemins absolus (/showthread.php?tid=4395)

Pages : 1 2


[Résolu]Réécriture d'url et chemins absolus - guile - 08-10-2009

Salut à tous,

Je m'adresse à vous car je suis sûr que quelqu'un sait comment m'aider!
Cela concerne le mod_rewrite d'apache, avec un soupçon de php.

J'ai réussi à rendre une seule et même page accessible à partir de différentes url.

http://sousdomaine.domaine.com/lang1/page1
http://sousdomaine.domaine.com/page1
http://www.domaine.com/sousdomaine/page1
http://www.domaine.com/sousdomaine/lang1/page1

Toutes ces url renvoient vers index.php?page=page1&lang=lang1 (car quand la langue n'est pas spécifiée, ça prend lang1 par défaut.

Mon soucis vient de la suite :
Je souhaite que PHP me trouve (par miracle? Big Grin) l'url absolue d'un fichier dont l'url absolue est soit :
http://soudomaine.domaine.com/dossier/fichier.truc
soit:
http://www.domaine.com/sousdomaine/dossier/fichiers.truc

Dans les variables $_SERVEUR, je ne trouve pas grand chose de très reluisant :-(.
De plus, je ne veux pas voir dans mon code de référence en dure (genre if ($domaine== 'www.domaine.com'), ou bien if ($request_url == 'sousdomaine/...') ...), ni dans mon .htaccess.

Le fait d'utiliser les / en séparateur est l'origine de mes problèmes, mais malheureusement ce séparateur est à mon goût le plus communément utilisé par l'utilisateur lambda.
Le fait également de me donner comme limite de ne pas mettre des conditions en dur est limitant également, je sais, mais c'est pour m'éviter de devoir bidouiller des fichiers à chaque passage du serveur local, au serveur de prod.
Et puis l'utilisation du sousdomaine est aussi à prendre en compte, sinon je n'aurais plus ce problème.

Merci à ceux qui arriveront à m'aider.


RE: Réécriture d'url et chemins absolus - Findel - 08-10-2009

Normalement un pti 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] devrait le faire Smile


RE: Réécriture d'url et chemins absolus - guile - 09-10-2009

Malheureusement ce n'est pas aussi simple :
REQUEST_URI contient dans mon cas /lang1/page1 ou bien /sousdomaine/lang1/page1

Je n'ai aucune trace dans $_SERVER du répertoire de base du site :-(


RE: Réécriture d'url et chemins absolus - christouphe - 09-10-2009

=> $_SERVER["HTTP_REFERER"] ??


RE: Réécriture d'url et chemins absolus - guile - 09-10-2009

Pas de http_referer non plus.

Voici ce qu'un print_r($_SERVER); me renvoie :

Code :
Array
(
    [DOCUMENT_ROOT] => /home/monuser/public_html/domaine/sousdomaine/public
    [GATEWAY_INTERFACE] => CGI/1.1
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
    [HTTP_ACCEPT_ENCODING] => gzip,deflate
    [HTTP_ACCEPT_LANGUAGE] => fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    [HTTP_CONNECTION] => keep-alive
    [HTTP_HOST] => sousdomaine.domaine.com
    [HTTP_KEEP_ALIVE] => 300
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 GTB6 (.NET CLR 3.5.30729)
    [PATH] => /bin:/usr/bin
    [QUERY_STRING] => lang=lang1&page=page1
    [REDIRECT_QUERY_STRING] => lang=lang1&page=page1
    [REDIRECT_STATUS] => 200
    [REDIRECT_UNIQUE_ID] => Ss9amV4XAS8AAAuOobQ
    [REDIRECT_URL] => /lang1/page1
    [REMOTE_ADDR] => 4.3.2.1
    [REMOTE_PORT] => 51199
    [REQUEST_METHOD] => GET
    [REQUEST_URI] => /lang1/page1
    [SCRIPT_FILENAME] => /home/monuser/public_html/domaine/sousdomaine/public/index.php
    [SCRIPT_NAME] => /index.php
    [SERVER_ADDR] => 1.2.3.4
    [SERVER_ADMIN] => me@domaine.com
    [SERVER_NAME] =>sousdomaine.domaine.com
    [SERVER_PORT] => 80
    [SERVER_PROTOCOL] => HTTP/1.1
    [SERVER_SIGNATURE] => <ADDRESS>Apache/1.3.41 Server at sousdomaine.domaine.com Port 80</ADDRESS>

    [SERVER_SOFTWARE] => Apache/1.3.41 (Unix) mod_log_bytes/1.2 mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.8e-fips-rhel5
    [UNIQUE_ID] => Ss9amV4XAS8AAAuOobQ
    [PHP_SELF] => /index.php
    [REQUEST_TIME] => 1255103130
    [argv] => Array
        (
            [0] => lang=fr&page=cv
        )

    [argc] => 1
)



RE: Réécriture d'url et chemins absolus - Findel - 09-10-2009

tu veux dire quoi par absolue ? je pense que notre incompréhension et donc nos mauvaises réponses viennent de là.
Tu veux le chemin physique sur le serveur de ton fichier ?

Donne nous un exemple de ce que tu voudrais obtenir.

Sinon tu peux aussi voir dans des constantes PHP du genre __FILE__. On s'en sert souvent pour déterminer la racine physique d'un site, en mettant par exemple un fichier à la racine et en y indiquant :
$basephysique = dirname(__FILE__).DIRECTORY_SEPARATOR;


RE: Réécriture d'url et chemins absolus - guile - 10-10-2009

Par exemple :
Pour les URI suivantes :
http://sousdomaine.domaine.com/
http://sousdomaine.domaine.com/lang1/page1/
http://sousdomaine.domaine.com/page1/
http://sousdomaine.domaine.com/lang1/

Je souhaite faire en sorte utiliser l'uri absolue suivante :
http://soudomaine.domaine.com/dossier/fichier.truc

Pour les URI suivantes :
http://www.domaine.com/sousdomaine/
http://www.domaine.com/sousdomaine/page1/
http://www.domaine.com/sousdomaine/lang1/
http://www.domaine.com/sousdomaine/lang1/page1/

Je souhaite faire en sorte d'utiliser l'adresse :
http://www.domaine.com/sousdomaine/dossier/fichiers.truc

Je suppose dans mon code ne pas connaître le nom du domaine, et sûrement autres petits détails qui font que ce code puisse passer d'un serveur à l'autre, d'une config à l'autre, d'un domaine à un autre.

Merci d'avance à vous si vous réussissez à m'aider


RE: Réécriture d'url et chemins absolus - Allwise - 10-10-2009

Ce que je comprends pas c'est : pourquoi tu rewrites tes URL si c'est pour utiliser le chemin standard du fichier ?
Pour résoudre ton problème tu peux tenter de faire un fichier qui parse le .htaccess à la recherche d'une règle qui correspond à l'URL courante pour en déterminer le fichier d'origine. Si tes règles de réécriture sont simples c'est jouable. Si ce sont des regexp compliquées faudra s'accrocher.

Sinon, toujours dans le même esprit, au lieu d'utiliser "en dur" les liens rewritées, tu crées une fonction qui aura pour but de créer ces URL en fonction d'une liste de règles de réécritures, que tu définis toi-même quelque part. Ainsi l'URL réelle du fichier tu l'auras dans ton code plutôt que uniquement dans ton htaccess et tu pourras la retrouver partout.

Y a peut-être plus simple, et peut-être possibilité d'activer / créer une variable d'environnement du côté d'Apache qui contiendrait l'URL réelle du fichier.


RE: Réécriture d'url et chemins absolus - Anthor - 10-10-2009

Tu veux l'adresse des fichiers au niveau client ou au niveau serveur ?


RE: Réécriture d'url et chemins absolus - Findel - 10-10-2009

Perso je vois pas le rapport entre les urls d'origine et l'url que tu souhaite en résultat... Je vois pas comment on peut en déduire l'une de l'autre puisqu'elle n'ont rien en commun

Ou alors un détal m'échappe