Aller au menu - Aller au contenu

Simuler l'URL rewriting avec l'erreur 404


Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Pseudo Commentaire
Page 1 
Hors ligne 1337833K # Posté le 18/06/2008 à 08:01:38
lock cmpxchg8b eax

Niveau référencement, ça m'étonnerait que ça marche bien ... :-°
 
Hors ligne DocLivadi # Posté le 18/06/2008 à 08:22:30
Membre Pas Content !
Avatar
Flux RSS

Je met 18/20 car je pense que si les hébergeurs interdissent l'URL rewriting,il vont aussi interdire ce genre de redirection :D .
 
Connecté entwanne # Posté le 18/06/2008 à 10:17:10
Avatar

Ville : Mirecourt
Pays : France métropolitaine

super_zero > Non, certains hébergeurs n'acceptent pas l'URL-Rewriting mais acceptent les ErrorDocument, comme beaucoup d'hébergeurs gratuits.
Je mets aussi 18/20, car on dirait qu'il est impossible de transmettre des variables de type POST.

Jabber : Image utilisateur
 
Hors ligne Natim # Posté le 18/06/2008 à 10:59:27
Apprendre à coder c'est coder
Avatar
Anciens
Flux RSS

Ville : Beaucourt
Pays : France métropolitaine
études : UTBM

Il semblerait que la portée des variables ne suive pas dans l'include.
Avec ton code tel quel :
Code : Apache
1
2
3
Notice: Use of undefined constant FIRST_DATA_URL - assumed 'FIRST_DATA_URL' in ~/sites/error/objet.php on line 2

Notice: Undefined variable: adresse in ~/sites/error/objet.php on line 2
 
Hors ligne Quadehar # Posté le 18/06/2008 à 12:24:25
Avatar

études : EFREI

Salut !

Je mets 13, car bien que le tutoriel soit bien rédigé, offre une solution, et que l'idée soit là, elle n'est pas exploitée à son maximum, loin s'en faut : on ne peut pas définir des vrais règles de réécriture.
Pour ma part, j'utilise cette astuce du 404, d'après un post trouvé sur le forum (je précise que moi-même je n'aurai jamais trouvé une telle astuce ^^, j'ai juste trouvé le script tout préparé sur le forum, c'est pourquoi je te félicite tout de même), et qui permet de réécrire les urls selon des vraies règles de réécriture :)

Voici le lien pour ceux que ca intéresse : http://www.siteduzero.com/forum-83-173 [...] .html#r171346

Cordialement,
Quadehar

Libre Pensée - Blog regroupant des histoires et nouvelles rédigées par mes soins.
 
Hors ligne samuel2202 # Posté le 18/06/2008 à 12:24:47
Pas assez de caractères :(
Avatar
Flux RSS

Simpa.
Une méthode à savoir pour ceux qui n'administrent pas eux-mêmes leurs serveurs.
Merci à toi.

19/20
 
Hors ligne kankan # Posté le 18/06/2008 à 13:42:09
kankan@internet:/com/sdz$
Avatar
Flux RSS

études : EFREI

Le gros problème de cela est le référencement en effet. Il faudrait, si la page existe, mettre un header indiquant que la page est trouvée.
A l'arrache, un truc de ce genre :
Code : PHP
1
2
3
<?php
header('HTTP/ 1.1 200 OK');
?>
 
Hors ligne Thulium # Posté le 18/06/2008 à 14:33:09
le p'tit chat !!!
Avatar

Ville : Les ponts-de-cé
Pays : France métropolitaine

J'avais fait un sytème un peu semblable: j'interdisais l'accès à tous les fichiers sauf index.php, et je redirigeais l'erreur 403 vers la page index.php ...
Sur firefox, je sais pas si ça le fait chez vous mais au lieu de me mettre l'erreur 404 du site web ça me met une page avec un formulaire de recherche, pareil sur tout les sites, donc peut-être qu'un site avec cette astuce serait inaccessible pour les gens dans mon cas ... a moins d'envoyer un header 200 ...
P.s: si vous savez comment remédier à ce problème faites moi signe !

merci.

"Keyboard not found, press F1 to resume."
 
Hors ligne titouille56 # Posté le 18/06/2008 à 14:46:32
oel ngati kame
Avatar
Flux RSS

Ville : Lanester
Pays : France métropolitaine

En effet les données $_POST ne marchent pas avec cette méthode.
Pour le référencement, je pense que l'astuce de kankan doit fonctionner.
Thulium --> je n'ai pas eu ce problème ! Je vais tout de même voir si ça change grand chose de mettre un header 200.
natim --> bizzare, j'ai essayé ça sur plusieurs serveurs et je n'ai jamais eu ce problème.
Quadehar --> bonne technique aussi cette fonction, j'y aurai jamais pensé !

Bref, je pense qu'il reste des choses à améliorer pour ce tutoriel.

Merci beaucoup !
 
Hors ligne Quadehar # Posté le 18/06/2008 à 15:05:52
Avatar

études : EFREI

Effectivement, il faut rajouter un header 200, pour que les navigateurs n'y aillent pas de leur propre page d'erreur personnelle et que les robots indexent convenablement :)

Libre Pensée - Blog regroupant des histoires et nouvelles rédigées par mes soins.
 
Hors ligne QuentinC 2 # Posté le 18/06/2008 à 17:03:59
Stagiaire qui bosse... ou pas
Flux RSS

Tu fais bien de rappeler cette petite astuce que peu de monde connaît. Ca m'a beaucoup servi quand j'étais chez free (voilà justement un exemple d'hébergeur qui n'accepte pas l'url-rewriting mais qui accepte les pages 404 perso).

Par contre tu ne vas pas au fond des choses : il faut aborder l'utilisation des expressionr égulières dans le cadre des redirection, et surtout ajouter un code de retour 200 en expliquant pourquoi il est absolument indispensable, pour les moteurs entre-autres, mais pas uniquement.

Je te mets 11/20, parce que même si c'est déjà pas mal, ce n'est pas suffisant

P.S. Sans vouloir me faire de la pub gratuite, tu peux t'inspirer (pas copier !) de mon tuto que j'avais fait là-dessus en 2006 http://quentinc.net/ref/articles/reecr [...] -mod-rewrite/

Pour ceux qui font la remarque avec les variables POST : Elles n'ont en principe pas à être concernées puisqu'elles sont indépendantes de l'URL appelée. Réécriture ou pas réécriture, les variables POST sont de toute façon conservées telles quelles.

java.lang.BrainNotFoundException : neuron connection failure

Javascript, php, html, jeux, blagues, etc. == http://quentinc.net/
 
Hors ligne python-guy # Posté le 19/06/2008 à 14:16:58
Vive archLinux.
Avatar

Pour éviter le problème du référencement, il faut en effet comme déjà dit utiliser header :
Code : PHP
1
2
3
4
5
6
<?php

header('HTTP/1.1 200 OK');
header('Status: 200 OK');

?>


Le deuxième header(), c'est pour le cas où PHP fonctionne en mode CGI

Image utilisateur
 
Hors ligne Dutiona # Posté le 19/06/2008 à 14:40:51
Vis pour être heureux !
Avatar

études : EISTI

Natim, pour la porté des variables, tu as du faire ton inclusion dans une fonction.
C'est donc normal que la portée des variables ne soit étendue qu'au variables locales de la fonction :
Citation : php.net
Lorsqu'un fichier est inclus, le code le composant hérite de la portée des variables de la ligne où l'inclusion apparaît. Toutes les variables disponibles à cette ligne dans le fichier appelant seront disponibles dans le fichier appelé, à partir de ce point. Cependant, toutes les fonctions et classes définies dans le fichier inclus ont une portée globale.


Pour y remédier :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
function inclusion($fichier, &$g){
  extract($g);
  include($file);
  $g = compact(array_keys($g));
}

//Et l'inclusion :
$g = get_defined_vars();
inclusion('fichier', $g);
extract($g);
?>

J'en convient, c'est lourd, mais c'est la seule solution.
Sinon, tu fais <?php include(fonction_qui_recupere_le_chemin($fichier)); ?>


Pour le tutorial, certe, comme l'on évoqué les autres membres, il faut ajouter un header 200.

De plus, tu ne dervais pas travailler sur la variable REQUEST_URI comme tu le fais car REQUEST_URI garderai les requêtes get à la fin de sa chaîne. Comme tu enleves la fin de la chaîne avec un str_replace, ça marcherait pas.
Tu devrais, soit travailler sur PHP_SELF (ou sur SCRIPT_NAME) soit utiliser strstr avec le troisième argument à true pour surprimer ce qui se trouve après.

Bref, encore du boulôt, c'est pour ça que je note pas.


Bisous, Nyu

Défiez ma brute !
Eclipse user | Ubuntu (KDE) user | php/sql/xhtml/css/xml/xsl/javascript/java/python/perl/c/scheme coder.
Framework in use: Seraframework (my own one).
In Microeisti staff.
 
Hors ligne Noth.red # Posté le 19/06/2008 à 19:46:40
No rage :)
Avatar

Ville : Arlon
Pays : Belgique
études : ISI Pierrard

Salut,

Pas mal le tutoriel, mais dommage pour les $_POST.

Sinon je me demandais comment les liens interne était fait dans un système pareil :
Code : HTML
1
<a href="objet.php?obj=livre" alt=""> </a>

ou
Code : HTML
1
<a href=objet-livre.html" alt=""> </a>

?

Merci d'avance.

Thibault @ Noth.red
 
Hors ligne titouille56 # Posté le 19/06/2008 à 20:21:34
oel ngati kame
Avatar
Flux RSS

Ville : Lanester
Pays : France métropolitaine

Ba pour le premier ça change pas : c'est une page PHP classique et pour l'autre, c'est avec le explode que tu ne dois pas couper avec un / mais avec un - (c'est expliqué à la fin du tutoriel).
 
Hors ligne Noth.red # Posté le 19/06/2008 à 22:15:01
No rage :)
Avatar

Ville : Arlon
Pays : Belgique
études : ISI Pierrard

Ah ouai sorry :) .

Thibault @ Noth.red
 
Hors ligne NeoZer0 # Posté le 17/07/2008 à 10:43:25
Nostalgeek
Avatar

études : EI Toulouse

Autre le faite qu'il manque les headers 200 pour éviter que les bots ne référence pas les pages, il aurait était judicieux de faire un système qui permette de mettre toutes ses régles de rewrite. Comme ette fonction que j'ai créer et posté il y a un moment sur le forum PHPCode : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
function rewriting()
{
        $fichier_conf = '.htrewriterules';
        $page_erreur = '404.php';
        $url = substr_replace($_SERVER['REQUEST_URI'],'',0,1);
        $open = fopen($fichier_conf,"r");
		while(!feof($open)){
			$rules = fgets($open,filesize($fichier_conf));
			$masque = explode('|',$rules);
			$url_finale = $masque[1];
			preg_match('`'.$masque[0].'`U',$url,$ereg);
			if(isset($ereg[0])){
					$i =0;
					$count = count($ereg);
					while($i <= $count -1){
						$url_finale = str_replace("$".$i,$ereg[$i],$url_finale);
						$i++;
					}
					$url_finale = str_replace(array("\r","\n"),'',$url_finale);
					$parse_url = parse_url($url_finale);
					if(isset($parse_url['query']))
					{
							$varget = $parse_url['query'];
							$varget = explode("&",$varget);
							foreach($varget as $varval)
							{
									$varval = explode("=",$varval);
									$_GET[$varval[0]] = $varval[1];
							}
					}
					header("HTTP/1.1 200 OK");
					header("Status: 200 OK");
					include($parse_url["path"]);
					exit;
			}
		}
        include($page_erreur);
}
?>

Le fichier de qui contient les règles ressemble à ceci
Code : Apache
1
2
^index.html$|index.php
^index-p([0-9]+).html$|index.php?page=$1

La seule chose avec ce genre de système c'est qu'il faut faire attention avec ses includes qui ne sont inclus directement depuis la page de rewriting.

Edit: cette fonction peut être améliorer on peux remplacer le | par un espace aussi pour être plus proche de la syntaxe du mod rewrite

n'oubliez pas de Image utilisateur ;)
Un code php commence par <?php et fini par ?> ne l'oublier pas dans le zCode
 
Hors ligne arkang3l # Posté le 01/09/2008 à 14:33:41
To be devil isn't bad
Avatar

Je ne met que 15 car cette technique ne conserve pas les variables transmises par POST.
Si quelqu'un pouvait m'expliquer le code de Dutonia...

Ne cliquez pas ici. Cliquez plutôt là -> *ICI*
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx