Solution pour l'Url rewriting chez Free :D

Nouveau WRInaute
Bon j'ai presque fini un script php qui permet de faire de l'url rewriting en php simplement, et en gérant les régles normales d'un fichier .htaccess mais le probléme c'est qu'il me faudrais quelqu'un pour le tester, ce script, vu que je suis pas un expert en url rewriting, donc si quelqu'un pouvait se dévouer pour ça, de préférence quelqu'un qui s'y connaisse en RegEx, sinon ca sert à rien :x

Précision : ca n'est pas le meme genre de script que celui déjà présenté sur ce forum :roll: Pour l'instant ca gére les rewritecond avec les variables %{HTTP_REFERER}, %{HTTP_USER_AGENT}, %{REMOTE_ADDR} et %{REMOTE_HOST}, et les rewriterule avec les flags [F], [G], [R], [C], [N], [NC] et bien sur [L] :p (J'essaye de mettre au point le [QSA] :x) le tout dans une class :)

Donc voilà si quelqu'un d'expérimenté voulait se dévouer pour la bonne cause ;)

Edit: Je veut bien mettre la source mais ca fait 400 lignes donc bon :x
 
Nouveau WRInaute
Bof, je l'avais pas mise parceque free accepte pas les sources php donc bon :/
Note: c'est coloré maintenant, emrci twister :D
La source

Si quelqu'un a des critiques à faire sur le code je suis ouvert aussi :) J'ai commenté la plupart des fonctions et le reste est assez facile à comprendre je pense :)[/url]
 
WRInaute occasionnel
Tu dis que tu n'utilises pas la même solution que ce qui a été présenté sur le forum, pourtant, d'après les commentaires dans ton fichier, tu utilises aussi l'erreur 404.
Quelle est la différence ?

Sinon, très bonne initiative, j'essaierais de la mettre en place dés que je pourrais...

:wink:
 
Nouveau WRInaute
Je voulais parler de la maniére de fonctionner du script, pas de la maniére dont il est appellé :)
A part l'ErrorDocument404 je ne vois pas une autre solution pour integrer le script comme il faudrait :)
Mais donc la "solution" que j'ai choisie est en rapport avec le fonctionnement du script, là il est inutile de rajouter une condition par page à rediriger, il suffit de faire un copier/coller des directives de réécriture d'un .htaccess "normal" (déstiné au mod_rewrite) dans un autre fichier dont on choisi le nom, on configure le script si il y a besoin, et ensuite le script s'occupe du reste :)

Donc voilà ^^ (Personne ne l'a encore essayé ?)

Awi, j'oubliais, j'ai mis l'error_reporting à E_ALL, comme ca si il y a une erreur php qui intevient, ca bloque le script, et ca peut etre corrigé rapidement, plutot que de "polluer" les error logs d'apache ^^
 
WRInaute occasionnel
Voici l'erreur obtenue chez moi,
en effet, tu appelles la fonction erreur sans paramètre de langue !


Code:
Warning: Missing argument 2 for erreur() in /var/www/free.fr/5/c/lefilasoi/urlrewriting.php on line 229

Warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/5/c/lefilasoi/urlrewriting.php:229) in /var/www/free.fr/5/c/lefilasoi/urlrewriting.php on line 236
 
WRInaute occasionnel
Une fois ce problème réglé,
avec ce .rewritemod :
Code:
RewriteRule ^imprimer-([^.]+)\.no_stat(\.([0-9]+))?$ imprimable.php?page=$1&no_stat=no_stat&res=$3 [L]
RewriteRule ^imprimer-([^.]+)(\.([0-9]+))?$ imprimable.php?page=$1&res=$3 [L]
RewriteRule ^([^.]+)\.no_stat(\.([0-9]+))?$ index.php?page=$1&no_stat=no_stat&res=$3 [L]
RewriteRule ^([^.]+)(\.([0-9]+))?$ index.php?page=$1&res=$3 [L]
J'obtiens une erreur 404 pour /accueil alors qu'il devrait renvoyer sur /index.php?page=accueil qui existe.

:?:

Edit : j'ai essayé d'enlever les ^ au début ou de mettre des / devant les urls mais rien n'y fait...
 
Nouveau WRInaute
Bon j'ai mis le txt à jour avec l'erreur corrigée (j'ai mis une valeur par défaut dans la définition de la fonction, je l'avais oubliée :x)
Et quant à ton probléme je ne vois pas de quoi ca peut venir j'ai essayé chez moi avec les 4 RewriteRule, en changeant l'index.php d'e celle qui semble poser probléme par une autre page et en affichant le tableau $_GET de cette page, j'obtient bien ce qu'il faut, et la redirection est bien faite pourtant ? (j'ai testé en local chez moi et chez free et ca fonctionne bien 8O

(J'ai mis à jour le txt et tu peut constater sur le fichier .rewritemod de chez free que ce sont bien tes RewriteRule qui fonctionnent (ici le /accueil) donc ca doit venir de ton coté oO

Merci de t'interesser à ca :)

*Tilt* en y repensant tu as vérifié d'avoir mit RewriteEngine On dans ton fichier ou d'avoir mit $this->config['ForcerNonVerif'] à TRUE dans la configuration ? (c'est à FALSE par défaut) Pense aussi à bien vérifier le ErrorDocument404 du .htaccess au cas où, sinon je ne vois pas d'ou ca peut venir d'autre :x
 
WRInaute occasionnel
Ca marche !
J'avais en effet oublié le RewriteEngine On.
Très bon script.
Ca nous ferait presque oublier l'absence d'url rewriting chez free :wink: .
En fait, j'ai malheureusement créé un script qui faisait de l'url rewriting sur mon site deux jours avant que tu proposes le tien.
Ca m'aurait fait gagner un peu de temps.
C'est sympa d'utiliser les expressions régulières du .htaccess.

Quelques petites suggestions :
la gestion des langues m'a l'air assez bizarre. Puisque tu utilises la fonction erreur sans paramètre, il n'est pas possible de changer la langue comme ça semblait être prévu au départ.
Proposer de rediriger vers une page personnalisée pour chaque erreur (404...) serait pas mal.

Si des gens sont intéressés et veulent voir le résultat de cet url-rewriting chez free permis par Shisui : -http://lefilasoi.free.fr/test_urlrewriting/accueil

:!: IMPORTANT : le script utilise un include() pour faire une "redirection". Pour éviter des problèmes avec les urls relatives, utilisez des urls absolues dans le .rewritemod.
:wink:
 
WRInaute occasionnel
OUPS : je me rends compte que ton script affiche bien la page mais renvoie au navigateur une erreur 404 :

Code:
GET /test_urlrewriting/accueil HTTP/1.1
Host: lefilasoi.free.fr
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: fr-fr,fr;q=0.8,de;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 30
Connection: keep-alive
Cookie: phpmv=de44482cd962ec71bd1a79c62a12b6dd; PHPSESSID=3f9006eb7d50b0faac315b2fa6a50f8f
Authorization: Basic U3lsdmllIENoYWdub246bGVmaWxhc3lsdmll

HTTP/1.x 404 Not Found
Date: Thu, 22 Sep 2005 17:18:54 GMT
Server: Apache/ProXad [Sep  2 2005 07:05:41]
X-Powered-By: PHP/4.3.10
Connection: close
Content-Type: text/html

C'est assez inquiétant pour les moteurs de recherche.
J'ai vu que tu a mis un
Code:
header("HTTP/1.0 100 OK");
Pourtant ... ça n'a pas l'air de marcher.

:!:
Allez, j'arrète de me répondre tout seul...
 
Nouveau WRInaute
Hum c'est embetant ca par contre >< Comment tu fait pour afficher tout les headers comme dans ton post ? (comme ca je vais essayer de trouve rune solution à ca :/)

Quant à la redirection vers des pages spécialisées j'en ai eu l'idée en me rappelant que apache faisait un truc comme ca et en pensant que la façon dont le script gére les 404 laisse peu de choix à çà, donc je suis en train de l'implementer dedans, tout comme la gestion de vraies "404" au cas ou la page n'existe vraiment pas :)
 
Nouveau WRInaute
Argh la providence xD J'avais déjà essayé de trouver une extension comme celle là pour un autre code mais j'en trouvais pas ^^ Merci ^____^

EDIT: J'ai fais quelques test avec ce mod, et apparement ca ne fait ca que chez free :/ (c'est embetant vu que c'est fait pour free ...)
Sur mon serveur local j'obtient bien un header 200 OK :
Code:
http://shisui.sytes.net/accueil

GET /accueil HTTP/1.1
Host: shisui.sytes.net
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Date: Sat, 24 Sep 2005 12:49:36 GMT
Server: Apache/2.0.54 (Win32) PHP/5.0.4
X-Powered-By: PHP/5.0.4
Content-Length: 46
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

Je ne sais pas si ca vient du coté de la configuration du serveur ou alors peut etre de la version d'Apache (free est en apache 1.3 et je suis en apache 2) ou meme de celle de php :/
Je vais essayer de voir du coté du .htaccess pour voir si une option n'est pas disponible pour ca ...
 
WRInaute accro
Hum, c'est bien ça le problème, le header qui renvoie une erreur 404 :\.

Par contre, si t'arrives à renvoyer un 200, ben c'est vraiment nickel, félicitations :).
 
WRInaute occasionnel
Ne te décourages pas :D
C'est tout à fait faisable chez free.
La preuve, ce que j'ai fait ( -http://lefilasoi.free.fr/accueil ) renvoie bien un code 200 Ok.
Le problème, c'est que j'ai utilisé la même méthode que toi.
Alors pourquoi ça ne marche pas sur ton script alors que ça marche sur le mien ?
Mystère...

La fin de mon fichier ressemble au tien :
Code:
header("HTTP/1.0 100 OK");
include( $adresse_base.$fichier."?page=".$page.$ajout_res.$ajout_stat."&redirection=OK" );
?>

:roll:

Edit : ça y est, j'ai vu la différence :
tu dois mettre HTTP/1.0 100 OK
Je ne sais pas pourquoi puisque ça retourne un code 200 mais bon...
ça devrait marcher.
:D
 
Nouveau WRInaute
Ah super merci beaucoup :D J'avais pas pensé à ca :/ Pourquoi ondoit envoyé un code 100 pour un header 200 lol ?
C'est pas logique des fois :)

Voilà j'ai mis à jour le script et le code coloré =)

Je finis le systéme des pages et c'est bon :)
 
WRInaute occasionnel
Salut,
le code que j'ai proposé, avec le code header 100, est reconnu comme une erreur HTTP par google !
Voir cette discussion
Le bon code à utiliser est finalement :
Code:
header("Status: 200 OK");

:wink:
 
Nouveau WRInaute
Ca m'a l'air bien interessant, je suis moi même chez free, et j'ai un forum que j'aimerais référencer avec cette technique..
Le problème est que je débute vraiment en programmation. Pourriez vous me dire comment je dois faire? Ou dois je mettre ces codes...

Merci d'avance à celui ou celle qui prendra un peu de temps pour m'aider :D
 
WRInaute occasionnel
Ce que tu demandes pose deux problèmes :
- faire de l'url rewriting chez free
- faire l'url-rewriting d'un forum

Pour le premier problème,
tu copies la source de Shisui
où tu remplaces
Code:
header("HTTP/1.0 100 OK");
par
Code:
header("Status: 200 OK");
Tu mets ce code dans un fichier nommé urlrewriting.php à la racine de ton site.
Tu fais ce qui est indiqué à la rubrique Installation en haut de la source de Shishu.
Tu crées le fichier .rewritemod à la racine de ton site.
C'est dans ce fichier, et non dans le .htaccess que tu mettras tes règles d'url rewriting.

Le second problème concerne justement les règles d'url-rewriting à mettre dans le .rewritemod qui sera de la forme :
Code:
RewriteEngine On
Tes règles de rewriting
Ce problème ne dépend plus du tout du fait que tu es chez free.
Il dépend du forum que tu utilises.
Pour un forum phpBB, tu auras des informations ici
Pour un autre forum, il faut chercher...

:wink:
 
WRInaute occasionnel
Non,
tu ne peux pas faire ça.
Pour avoir une belle url comme ça, tu dois payer un nom de domaine pour ton site.
(ce n'est pas très cher...)

:wink:
 
Nouveau WRInaute
Merci pour ta réponse.

J'ai bien mon nom de domaine achete chez OVH mais ca ne me permet que d'acceder a mon site en tapant www.masociete.fr mais par la suite le visiteur verra directement l'url de free http://masociete.free.fr alors que j'aurai justement souhaité cacher cette derniere ! :/

N'y a t-il pas moyen de 'rediriger' automatiquement une requête ou quelque chose dans ce genre afin de me permettre de n'afficher que mon url "pro" www.masociete.fr plutot que celle de free : http://masociete.free.fr ?

Merci ;)
 
WRInaute occasionnel
Tu n'as rien de spécial à modifier,
juste mettre dans le .rewritemod ce que tu aurais du mettre dans le .htaccess

Edit : la source n'a toujours pas été modifiée, donc tu dois toujours faire ça :
Twisterss a dit:
tu copies la source de Shisui
où tu remplaces
Code:
header("HTTP/1.0 100 OK");
par
Code:
header("Status: 200 OK");
 
Nouveau WRInaute
Je l'ai fait, mais le truc, c'est qu'à chaque fois, ca m'affiche:

Code:
The requested URL /urlrewriting.php was not found on this server

Je sais vraiment pas pourquoi... Ce qui est encore plus bizarre, c'est que si je retire le .rewritemod, ca m'affiche ca:



Code:
Warning: fopen(.rewritemod): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\urlrewriting.php on line 252

Warning: filesize(): Stat failed for .rewritemod (errno=2 - No such file or directory) in c:\program files\easyphp1-8\www\urlrewriting.php on line 253

Warning: fread(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\urlrewriting.php on line 253

Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\urlrewriting.php on line 254

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\urlrewriting.php:252) in c:\program files\easyphp1-8\www\urlrewriting.php on line 235
Not Found
The requested URL /urlrewriting.php was not found on this server
(petite précision, la, j'essaie en local, d'où le "c:\program files\easyphp1-8\www\")

La, je sais vraiment pas quoi faire.

PS: si ca peut aider, voila ce que j'ai mis dans le .rewritemod:

Code:
RewriteEngine On
RewriteRule [.]*-vf([0-9]*) viewforum.php?%{QUERY_STRING}&f=$1
RewriteRule [.]*-vp([0-9]*) viewtopic.php?%{QUERY_STRING}&p=$1
RewriteRule [.]*-vt([0-9]*) viewtopic.php?%{QUERY_STRING}&t=$1
RewriteRule [.]*-vc([0-9]*) index.php?%{QUERY_STRING}&c=$1
RewriteRule [.]*-ac([0-9]*) album_cat.php?%{QUERY_STRING}&cat_id=$1
RewriteRule [.]*-at([0-9]*) album_thumbnail.php?%{QUERY_STRING}&pic_id=$1
RewriteRule [.]*-apic([0-9]*) album_pic.php?%{QUERY_STRING}&pic_id=$1
RewriteRule [.]*-apm([0-9]*) album_picm.php?%{QUERY_STRING}&pic_id=$1
RewriteRule [.]*-full-asp([0-9]*) album_showpage.php?full=&pic_id=$1
RewriteRule [.]*-asp([0-9]*) album_showpage.php?%{QUERY_STRING}&pic_id=$1
RewriteRule [.]*-aper([0-9]*) album_personal.php?%{QUERY_STRING}&user_id=$1
RewriteRule [.]*-dc([0-9]*) dload.php?%{QUERY_STRING}action=category&cat_id=$1
RewriteRule [.]*-df([0-9]*) dload.php?%{QUERY_STRING}action=file&file_id=$1
RewriteRule [.]*-kbc([0-9]*) kb.php?%{QUERY_STRING}mode=cat&cat=$1
RewriteRule [.]*-kba([0-9]*) kb.php?%{QUERY_STRING}mode=article&k=$1
RewriteRule [.]*-kbsmp kb.php?mode=stats&stats=mostpopular
RewriteRule [.]*-kbstr kb.php?mode=stats&stats=toprated
RewriteRule [.]*-kbsl kb.php?mode=stats&stats=latest
RewriteRule [.]*-pbc([0-9]*) kb.php?%{QUERY_STRING}mode=cat&cat=$1
RewriteRule [.]*-pa([0-9]*) kb.php?%{QUERY_STRING}mode=article&k=$1
RewriteRule [.]*-psmp kb.php?mode=stats&stats=mostpopular
RewriteRule [.]*-pstr kb.php?mode=stats&stats=toprated
RewriteRule [.]*-pbsl kb.php?mode=stats&stats=latest
 
Nouveau WRInaute
Pourtant, j'ai fait tout ce qu'il faut: j'ai mis un .htaccess qui renvoie vers le document urlrewriting.php, j'ai mis le document en question et j'ai aussi mis le .rewritemod.

J'ai bien remplacé ce qu'il faut dans le urlrewriting.php, j'ai essayé en mettant une simple redirection dans le .rewritemod... Je sais plus quoi faire...
 
Nouveau WRInaute
Salut, j'ai testé se script pour générer une image en GD, seulement quand j'apelle le serveur ne me génere pas l'image comme il faut, voici ce que j'ai mis dans .rewritemod

RewriteEngine On
RewriteRule ^sign\.png$ ./sign.php [L]

Merci de votre aide
 
Nouveau WRInaute
PB de mise en place

Salut, j'avais un site avec l'urlrewriting qui fonctionner bien maintenent que je l'ai mis chez free il marche plus, j'ai donc fait (comme il faudrais je pense) la procedure susnommée mais voilaj'ai un bug !!!
le .htaccess redirige bien vers urlrewriting.php j'ai bien mis le .rewritemod qui est d'origine mais quand je clique sur un lien j'ai une erreur.
voir le site verrebois-conceptet tester pour voir l'erreur.
Si il y a une solution.....
 
Nouveau WRInaute
connait pas le .htaccess

bonjour bonjour

je suis nouveau sur le forum (la preuve c'est mon premier message >.<) et j'aimerai faire de l'URL rewriting pour pouvoir reférencer chaque page de mon site, mais le probleme c'est que je uis chez free...on m'as dis que free desactivait cette fonction :( mais ce post m'as redonné espoir :D

et j'aimerai savoir ce que je dois mettre ...
voila mon fichier htaccess actuel :
Code:
RewriteEngine on

RewriteRule ^page\.htm index.php?page=$l [ QSA, L ]
je ne sia spas me servir du .htaccess pour l'instant =/ donc je nage...svp...aidez moi :'(
 
Discussions similaires
Haut