Url rewriting quelle syntaxe

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics


Kmacleod
WRInaute accro
WRInaute accro
 
Messages: 3418
Inscription: 28 Nov 2002

Url rewriting quelle syntaxe

Message le Ven Jan 24, 2003 11:36

Après avoir bidouillé pour m'en sortir, je seche

Quelle est la syntaxe que je pourrais employer pour une adresse de ce genre

articles.php?pg=site11&doc=item0849
en sachant que site11 est un fichier texte site11.txt
et que item0849 est un fichier text item0849.txt
ces deux fichier passent ensuite dans des includes

J'ai essayé :
RewriteRule ^article([0-9]+)item([0-9]+)\.html$ article.php ?pg=$1&doc=item$2 [L]
RewriteRule ^article([0-9]+)\.html$ article.php ?pg=$1&doc [L]
marche pas, mais ne plante pas

RewriteRule ^article([0-9]+)(item([0-9]+))\.html$ article.php?pg=$1&doc=$2 [L]
marche pas mais ne plante pas

Je me demande si il ne faudrait pas modifier dans mon script pour n'avoir que
articles.php?pg=11&doc=0849
avec 11.txt et 0849.txt, toujours en include


Gralon
WRInaute impliqué
WRInaute impliqué
 
Messages: 662
Inscription: 2 Nov 2002

Message le Ven Jan 24, 2003 12:01

^article-(.*)-item(.*)\.html$ article.php?pg=site$1&doc=item$2 [L]
devrait fonctionner pour
article-11-item0849.html ---> article.php?pg=site11&doc=item0849

ou plus généralement :

^article_(.*)_(.*)\.html$ article.php?pg=$1&doc=$2 [L]
devrait fonctionner pour
article_site11_item0849.html ---> article.php?pg=site11&doc=item0849


hetzeld
WRInaute passionné
WRInaute passionné
 
Messages: 2209
Inscription: 2 Déc 2002

Message le Ven Jan 24, 2003 13:35

Gralon a écrit:^article-(.*)-item(.*)\.html$ article.php?pg=site$1&doc=item$2 [L]
devrait fonctionner pour
article-11-item0849.html ---> article.php?pg=site11&doc=item0849

Ne jamais faire cela ! C'est la porte ouverte aux crackers !
(.*) veut dire n'importe quoi, y compris "h**p://baddomain/badscript.php" :twisted:

Il faut être plus strict, par exemple vérifier lorsqu'on fait l'include que le fichier inclus est bien sur le même domaine, par exemple en préfixant son nom avec un chemin "en dur" du type:
include("monchemin/tranquille/".$fichier);

Il vaut mieux utiliser :
Code: Tout sélectionner
RewriteRule ^article-pg([0-9]+)-doc([0-9]+)\.html$  article.php?pg=site$1.txt&doc=doc$2.txt [L]

permet de renommer
article-pg11-doc0849.html en article.php?pg=site11.txt&doc=doc0849.txt

Dan

PS: attention aux espaces avec les copier/coller il n'y en a que 2: après le $ et avant le [L]
Dernière édition par hetzeld le Ven Jan 24, 2003 13:43, édité 2 fois.


absoluteweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 478
Inscription: 22 Nov 2002

Message le Ven Jan 24, 2003 13:37

Normal que cela ne fonctionne pas [0-9] attend uniquement une valeur numérique...


Kmacleod
WRInaute accro
WRInaute accro
 
Messages: 3418
Inscription: 28 Nov 2002

Message le Ven Jan 24, 2003 13:46

Merci Dan,

mais pour le problème de sécurité, celà constitue une porte d'entrée, mais la porte n'est pas visible au regard de l'adresse - je veux dire par là que celui qui veut essayer d'entrer doit tatonner et esaayer plusieurs fois avant effectivement de passer (avec un script en boucle c'est surement vite fait)

Je vais plustôt essayer ta solution, je ne sais pas mais elle m'inspire mieux.

Pourquoi rajouter les .txt dans la partie de droite alors qu'ils n'y sont pas habituellement

Pour l'include avec chemin absolu, non seulement je fait un include avec ce path là, mais auparavant, je teste que le fichier existe, pour eviter les erreurs

Question subsidiaire : l'url rewritting et plus généralement le .htaccess peut il être testé en local avec serveur apache avec le bon mode positionné dans le fichier de configuration (http.confd)


absoluteweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 478
Inscription: 22 Nov 2002

Message le Ven Jan 24, 2003 14:01

Au fait, tu sembles avoir changé d'avis sur l'URL Rewriting, même pour ton site :?: :lol:


hetzeld
WRInaute passionné
WRInaute passionné
 
Messages: 2209
Inscription: 2 Déc 2002

Message le Ven Jan 24, 2003 14:04

Kmacleod a écrit:Merci Dan,
Pourquoi rajouter les .txt dans la partie de droite alors qu'ils n'y sont pas habituellement
...
Question subsidiaire : l'url rewritting et plus généralement le .htaccess peut il être testé en local avec serveur apache avec le bon mode positionné dans le fichier de configuration (http.confd)

Salut Kmacleod,

J'ai mis les .txt en suivant ton exemple. Cela dépend de la manière dont ton fichier exécute l'include, bien sûr. Tu peux les laisser tomber si ton programme php les rajoute de lui-même.

Tu peux tester l'URL rewriting en local. Si tu es sur Windows, il faut Apache 1.3.27 minimum parce que sinon il y a un bug "connu" de réécriture. Par exemple, avec la version 1.3.20 d'Apache installée par EasyPHP (largement utilisé) cela ne fonctionne pas correctement. J'ai mis un moment avant de trouver pourquoi. :x

Les bons paramètres pour httpd.conf sont (en local):
"AllowOverride All" (attention à la sécurité si tu n'es pas le seul à utiliser le serveur)
et "AccessFileName .htaccess" (c'est mis par défaut)
Il faut aussi t'assurer que:
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
ne soient pas commentés (ils le sont par défaut)

Si tu n'arrives pas à utiliser les mêmes règles que sur ton serveur distant, tu peux définir un autre nom que .htaccess, par exemple "AccessFileName .htaccesslocal".
C'est utile si tu dois utiliser RewriteBase en local à cause d'une install non standard.
Cela peut éviter bien des co....ries si tu synchronise les deux bécanes sans réfléchir.
Une synchro non réfléchie m'a un jour valu de faire 250000 hits en moins de 2 heures chez OVH alors que cela marchait chez moi... :oops:

Si tu coinces avec tes règles et que le problème n'est pas "d'intérêt général" , envoie moi un message.

Dan


Yvan
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 295
Inscription: 6 Nov 2002

Message le Ven Jan 24, 2003 14:09

Je confirme qu'on peut faire marcher l'URL Rewriting en local (ma config : XP Home Edition / Easy PHP 1.5). Le problème est parfois que sous windows on ne peut pas renommer un fichier en ".htaccess". La technique c'est de le faire par les commandes MS-DOS (cmd.exe sous XP/2000/NT), et de taper la ligne de commande : rename htaccess.txt .htaccess

Yvan.


hetzeld
WRInaute passionné
WRInaute passionné
 
Messages: 2209
Inscription: 2 Déc 2002

Message le Ven Jan 24, 2003 14:16

Yvan a écrit:Je confirme qu'on peut faire marcher l'URL Rewriting en local (ma config : XP Home Edition / Easy PHP 1.5). Le problème est parfois que sous windows on ne peut pas renommer un fichier en ".htaccess". La technique c'est de le faire par les commandes MS-DOS (cmd.exe sous XP/2000/NT), et de taper la ligne de commande : rename htaccess.txt .htaccess

Yvan.

Yvan,

J'imagine que tu n'as jamais essayé d'utiliser le "RewriteBase" :wink:

Dan

PS: tu devrais passer à EasyPHP 1.6, au moins tu aurais une version plus récente d'Apache et mySQL


Yvan
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 295
Inscription: 6 Nov 2002

Message le Ven Jan 24, 2003 14:22

Heu non, ça sert à quoi (je n'en ai pas trouvé trace dans ton magnifique article) ?

Yvan.


Gralon
WRInaute impliqué
WRInaute impliqué
 
Messages: 662
Inscription: 2 Nov 2002

Message le Ven Jan 24, 2003 14:46

hetzeld a écrit:
Gralon a écrit:^article-(.*)-item(.*)\.html$ article.php?pg=site$1&doc=item$2 [L]
devrait fonctionner pour
article-11-item0849.html ---> article.php?pg=site11&doc=item0849

Ne jamais faire cela ! C'est la porte ouverte aux crackers !
(.*) veut dire n'importe quoi, y compris "h**p://baddomain/badscript.php" :twisted:

Il faut être plus strict, par exemple vérifier lorsqu'on fait l'include que le fichier inclus est bien sur le même domaine, par exemple en préfixant son nom avec un chemin "en dur" du type:
include("monchemin/tranquille/".$fichier);



ben ça paraît évident qu'il faut vérifier que l'include est bien sur ton serveur (et dans ton répertoire).
c'est sur que si il fait un simple include du paramètre dans son url .... arghhhhhhh

désolé j'ai pas pensé que certain oublierai ça ... :oops:
c'est pourtant un pb connu


Kmacleod
WRInaute accro
WRInaute accro
 
Messages: 3418
Inscription: 28 Nov 2002

Message le Ven Jan 24, 2003 14:54

Comment se voit un UR actif en local

Les adresses des liens internes sont modifiés et sont en html ?
L'URL est devenue html
L'url en forme html fonctionne et c'est la page en php qui s'ouvre

Question triviales ....


hetzeld
WRInaute passionné
WRInaute passionné
 
Messages: 2209
Inscription: 2 Déc 2002

Message le Ven Jan 24, 2003 14:55

Yvan a écrit:Heu non, ça sert à quoi (je n'en ai pas trouvé trace dans ton magnifique article) ?
Yvan.

Merci pour l'éloge :wink:

En fait, cela pourrait faire partie de la suite de l'article que je suis occupé à concocter, mais j'hésite franchement parce que cela risque de semer la confusion dans les esprits.:wink: ...

Essayons d'expliquer par l'exemple, soit la règle (facile):
Code: Tout sélectionner
RewriteRule   ^ancien\.html$  nouveau.html 

définie dans le fichier /abc/def/.htaccess (on parle ici de répertoire physique sur le serveur et non d'URL)

Si le serveur a une directive d'alias définie comme:
Code: Tout sélectionner
Alias /xyz /abc/def

Un même fichier physique peut être accédé sous /xyz/nouveau.html ou /abc/def/nouveau.html et donc, dans notre exemple, la réécriture de:
/xyz/ancien.html se fera en /xyz/nouveau.html
et celle de
/abc/def/ancien.html se fera en /abc/def/nouveau.html

Avec la directive "RewriteBase /xyz" et une requête pour /xyz/ancien.html,
les étapes de la réécriture sont les suivantes:
Code: Tout sélectionner
/xyz/ancien.html     -> /abc/def/ancien.html  (dû à l'Alias)
/abc/def/ancien.html -> /abc/def/nouveau.html  (dû à la RewriteRule)
/abc/def/nouveau.html -> /xyz/nouveau.html      (dû à la RewriteBase)
/xyz/newstuff.html     -> /abc/def/newstuff.html  (dû à l'Alias)


Donc un appel de /xyz/ancien.html donnera bien le bon fichier (et le bon répertoire serveur) /abc/def/nouveau.html

C'est tordu, mais c'est comme cela qu'Apache fonctionne en interne :wink:

Tu comprends pourquoi je n'ai pas voulu encombrer l'article avec un truc don peu de nous se servent. C'est principalement utile pour les admin système chez les hébergeurs, pas pour les utilisateurs comme nous.
Si tu avais une bécane avec plusieurs domaines et des Alias définis, tu en aurais besoin :wink:

Dan


Yvan
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 295
Inscription: 6 Nov 2002

Message le Ven Jan 24, 2003 15:00

Et bien merci de ta réponse plus qu'enrichissante. J'y penserais si un jour j'ai mon propre serveur !

Sinon je ne peux pas mettre EasyPHP 1.6, car il plante sous XP, donc j'utilise le 1.5 seulement pour l'exécutable, après avoir installé le 1.6. J'ai donc bien Apache 1.3.4, PHP 4.2.0 et MySQL 1.23.39. De toute manière c'est en local, et ça diffère un peu du serveur sur lequel je suis hébergé.

Yvan.


hetzeld
WRInaute passionné
WRInaute passionné
 
Messages: 2209
Inscription: 2 Déc 2002

Message le Ven Jan 24, 2003 15:04

Kmacleod a écrit:Comment se voit un UR actif en local
Les adresses des liens internes sont modifiés et sont en html ?
L'URL est devenue html
L'url en forme html fonctionne et c'est la page en php qui s'ouvre
Question triviales ....

Il n'y a pas de questions idiotes, il n'y a que les réponses qui le sont :lol:

Idéalement, tu devrais modifier tous tes liens internes pour être sous la forme nouvelle (de type "fichier.html"), cela permettrait aux moteurs de les suivre sans état d'âme...
Les anciennes URL référencées sur les moteurs seront toujours opérationelles donc avec du pot tu doubles ta présence sur ces moteurs, au moins pour un certain temps, et pour les url qui étaient indexée dans la forme antérieure (du genre 2 paramètres ou moins) :wink:

Quel que soit le langage de script (PHP/ASP/...) le navigateur ne reçoit jamais que du pur HTML (hors sites de type flash...) vu que le script génère du HTML.
Il est donc impossible de déterminer s'il y a eu réécriture, voire de déterminer le langage de script sous-jacent.

Un avantage pour ceux qui changent le langage de script pour passer, par exemple d'ASP vers PHP. Les liens visibles restent les mêmes.

A+

Dan

Url rewriting quelle syntaxe

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google goo.gl

  • Liste des backlinks
    Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
  • Transformer des textes non cliquables en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités