Url rewriting et les forum simple machines ( smf )

Discussion dans 'URL Rewriting et .htaccess' créé par brakstar, 17 Août 2005.

  1. brakstar
    brakstar WRInaute discret
    Inscrit:
    5 Juillet 2005
    Messages:
    207
    J'aime reçus:
    0
    Bonjours à tous les coders.

    2 jours que je passe sur le forum smf pour trouver la solution mais, rien ...... j'ai scrutté webrankinfo ...... rien.

    Parlons du rewriting et des forums smf. Apremière vue tout est simple , juste une case à cocher et c'est bon. ( encore faut -il que le serveur supporte le mod_rewrite scrutable avec la fonction phpinfo()

    Donc moi cela ne marche pas, pourtant je suis presque arrivé au but.

    Le code de base de la réécriture d'url dans les forums smf se trouve : forum_smf/source/QueryString.php ( c'est la derniere fonction tout en bas )

    elle donne :

    Code:
    // Rewrite URLs to include the session ID.
    function ob_sessrewrite($buffer)
    {
    	global $scripturl, $modSettings, $user_info, $context;
    
    	// If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
    	if ($scripturl == '' || !defined('SID'))
    		return $buffer;
    
    	// Do nothing if the session is cookied, or they are a crawler - guests are caught by redirectexit().  This doesn't work below PHP 4.3.0, because it makes the output buffer bigger.
    	if (empty($_COOKIE) && SID != '' && (!$user_info['is_guest'] || (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false)) && @version_compare(PHP_VERSION, '4.3.0') != -1)
    		$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . ';', $buffer);
    
    	// This should work even in 4.2.x, just not CGI.
    	if (!empty($modSettings['queryless_urls']) && (!$context['server']['is_cgi'] || @ini_get('cgi.fix_pathinfo') == 1) && $context['server']['is_apache'])
    	{
    		// Let's do something special for session ids!
    		if (defined('SID') && SID != '')
    			$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html?' . SID . '\$2\"'", $buffer);
    		else
    			$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
    	}
    
    	// Return the changed buffer.
    	return $buffer;
    }
    Chez moi elle ne marche pas .......

    Les urls sont toujours sous forme de :

    http://www.brakstar.com/forum/index.php?board=19.0

    alors que je voudrai qu'elle soit sous la forme ( pour l'instant ) :

    http://www.brakstar.com/forum/index.php/topic,1628.html

    Après avoir lu un tutorial de Mr [Unknow]

    J'ai remplacé la fonction ci dessus par :

    Code:
    // Rewrite URLs to include the session ID.
    function ob_sessrewrite($buffer)
    {
    	global $scripturl, $modSettings, $user_info, $context;
    
    	// If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
    	if ($scripturl == '' || !defined('SID'))
    		return $buffer;
    
    	// Do nothing if the session is cookied, or they are a crawler - guests are caught by redirectexit().  This doesn't work below PHP 4.3.0, because it makes the output buffer bigger.
    	if (empty($_COOKIE) && SID != '' && (!$user_info['is_guest'] || (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false)))
    		$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . '&', $buffer);
    	// You can't do both, because session_start() won't catch the session if you do.  But this should work even in 4.2.x, just not CGI.
    	else
    		$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+)(#[^"]*)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
    
    	// Return the changed buffer.
    	return $buffer;
    }
    Et la ça à presque marché !

    J'avais des pages sous forme :

    http://www.brakstar.com/forum/index.php/topic,1628.html

    mais malheureusement sur tousles urls rewrités il y avait une erreur 404 ( page inconnue au bataillon.

    J'ai aussi mis un .htacces dans forum/

    avec ce code :

    Code:
    RewriteEngine On
    RewriteRule ^topic-([^/]+)[/]?$ /forum/index.php?topic=$1
    RewriteRule ^board-([^/]+)[/]?$ /forum/index.php?board=$1
    Mais rien ne fais ... erreur 404 :oops:

    version du forum : 1.1 beta 3 public

    :?: Pourriez vous m'aider :?:
     
  2. correiaj
    correiaj WRInaute impliqué
    Inscrit:
    25 Avril 2005
    Messages:
    987
    J'aime reçus:
    0
    tu mets deux fois le rep...c´est pour ça.
    Tu peux nous dire les détails de l´erreur 404?
     
  3. brakstar
    brakstar WRInaute discret
    Inscrit:
    5 Juillet 2005
    Messages:
    207
    J'aime reçus:
    0
    J'ai une redirection automatique mais quand je l'avais désactivée

    ça me disait :

    http://www.brakstar.com/forum/index.php/topic,XX.html was not found on this server

    que veux tu dire par : j'ai doublé le rep ?
     
  4. correiaj
    correiaj WRInaute impliqué
    Inscrit:
    25 Avril 2005
    Messages:
    987
    J'aime reçus:
    0
    Étrange format d´URL non?
     
  5. brakstar
    brakstar WRInaute discret
    Inscrit:
    5 Juillet 2005
    Messages:
    207
    J'aime reçus:
    0
    Oui en effet !

    Tu me proposerai quoi ?
     
  6. brakstar
    brakstar WRInaute discret
    Inscrit:
    5 Juillet 2005
    Messages:
    207
    J'aime reçus:
    0
    Voici le tutorial pour VRAIMENT réécrire les urls D'un forum SMF 1.1 Béta 3 Publique !

    avoir de urls sous forme :

    http://www.serveur.com/forum/board-11.0

    ( niveau du tutos : moyen quand vous avez la solution ! et vous l'avez ! )

    Donc suposons que vous avez un forum smf ayant cette url :

    http://www.serveur.com/forum/

    Premiere chose :

    Remplacer la derniere fonction de http://www.serveur.com/forum/source/QueryString.php qui se présente sous forme :

    Code:
    // Rewrite URLs to include the session ID.
    function ob_sessrewrite($buffer)
    {
    	global $scripturl, $modSettings, $user_info, $context;
    
    	// If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
    	if ($scripturl == '' || !defined('SID'))
    		return $buffer;
    
    	// Do nothing if the session is cookied, or they are a crawler - guests are caught by redirectexit().  This doesn't work below PHP 4.3.0, because it makes the output buffer bigger.
    	if (empty($_COOKIE) && SID != '' && (!$user_info['is_guest'] || (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false)) && @version_compare(PHP_VERSION, '4.3.0') != -1)
    		$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . ';', $buffer);
    
    	// This should work even in 4.2.x, just not CGI.
    	if (!empty($modSettings['queryless_urls']) && (!$context['server']['is_cgi'] || @ini_get('cgi.fix_pathinfo') == 1) && $context['server']['is_apache'])
    	{
    		// Let's do something special for session ids!
    		if (defined('SID') && SID != '')
    			$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html?' . SID . '\$2\"'", $buffer);
    		else
    			$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
    	}
    
    	// Return the changed buffer.
    	return $buffer;
    }
    par :

    Code:
    // Rewrite URLs to include the session ID.
    function ob_sessrewrite($buffer)
    {
    	global $scripturl, $modSettings, $user_info, $context;
    
    	// If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
    	if ($scripturl == '' || !defined('SID'))
    		return $buffer;
    
    	// Do nothing if the session is cookied, or they are a crawler - guests are caught by redirectexit().  This doesn't work below PHP 4.3.0, because it makes the output buffer bigger.
    	if (empty($_COOKIE) && SID != '' && (!$user_info['is_guest'] || (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false)))
    		$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . '&', $buffer);
    	// You can't do both, because session_start() won't catch the session if you do.  But this should work even in 4.2.x, just not CGI.
    	else
    		$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+)(#[^"]*)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
    
    	// Return the changed buffer.
    	return $buffer;
    ensuite ajouter cette ligne à http://www.serveur.com/forum/index.php :

    Code:
    $scripturl2 = '/';
    juste après :

    Code:
    // Get everything started up...
    define('SMF', 1);
    @set_magic_quotes_runtime(0);
    error_reporting(E_ALL);
    $time_start = microtime();
    Ligne 37 environ

    ensuite :

    Editez ces 3 fichiers :

    Sources/BoardIndex.php
    Sources/Display.php
    Sources/MessageIndex.php


    Remplacer les expressions contenant :

    Code:
    '<a href="' . $scripturl . '?topic=' . 
    par :

    Code:
    '<a href="' . $scripturl . '/forum/topic-' . 
    puis toujours dans ces fichiers

    Code:
    '<a href="' . $scripturl . '?board=' . 
    par :

    Code:
    '<a href="' . $scripturl . '/forum/board-' . 
    Ensuite rechercher dans vos fichiers ****.template.php et vos 3 fichiers sources précédement modifiés les codes contenant :

    Code:
    ?board=
    remplacer les par :

    Code:
    /forum/board-
    idem pour les codes contenant :

    Code:
    ?topic=
    changer par :

    Code:
    /forum/topic-
    ensuite il faudra déclarer la variable globale dans vos fichiers ****.template.php comme ceci

    Code:
    global $scripturl2,
    déclarer partout ou cela est néccéssaire.

    déclaré la aussi dans display.php ces lignes sont en générale en haut de page mais méfiez vous.

    puis configurez votre .htaccess placé dans votre repertoir : /forum/ de cette façon ( ceci peut varier selon les différents serveurs moi c'est papache ) :

    Code:
    RewriteEngine On
    RewriteRule ^topic-([^/]+)[/]?$ /forum/index.php?topic=$1 [L]
    RewriteRule ^board-([^/]+)[/]?$ /forum/index.php?board=$1 [L]
    et voila mes amis vos urls seront sous forme de :

    http://www.serveur.com/forum/board-11.0

    et vos topics :

    http://www.serveur.com/forum/topic-72.0

    a+ les amigos

    [​IMG]
     
  7. bidibul
    bidibul Nouveau WRInaute
    Inscrit:
    4 Août 2005
    Messages:
    40
    J'aime reçus:
    0
    bonjour, j'ai tout fait, ça marche pas... :( j'ai une belle page blanche... je recommencerai tout, j'ai peut-être fait une erreur quelque part, j'ai pourtant bien fait gaffe mais bon... est-ce que ça marche sur tous les thèmes ? classic par exemple, celui que j'utilise ?
     
Chargement...
Similar Threads - rewriting forum simple Forum Date
URL rewriting sur forum Problèmes de référencement spécifiques à vos sites 26 Août 2008
Forum Phbb rewriting Développement d'un site Web ou d'une appli mobile 26 Mai 2008
Baisse de fréquentation de mon forum avec url rewriting Problèmes de référencement spécifiques à vos sites 15 Mars 2008
URL Rewriting sur un forum IPB : utile ou pas? URL Rewriting et .htaccess 27 Février 2008
URL Rewriting et forum URL Rewriting et .htaccess 28 Octobre 2007
url rewriting et ::Voir le Forum ou ::voir le sujet URL Rewriting et .htaccess 12 Mai 2007
Rewriting pour forum bénéfique ou non? Débuter en référencement 10 Février 2007
URL rewriting blog + forum URL Rewriting et .htaccess 26 Janvier 2007
Forum phpbb : problème url rewriting et duplicate content URL Rewriting et .htaccess 17 Décembre 2006
URL rewriting pour forum phpbb 2.0.21 URL Rewriting et .htaccess 29 Novembre 2006
Quel forum pour un url rewriting parfait ... URL Rewriting et .htaccess 25 Novembre 2006
Gros problème avec forum - url rewriting URL Rewriting et .htaccess 21 Août 2006
Rewriting d'un forum et balise Title de la page URL Rewriting et .htaccess 11 Juillet 2006
Problème avec le rewriting d'un forum PHPBB Développement d'un site Web ou d'une appli mobile 20 Mai 2006
Le .htaccess de Wordpress overwrite le rewriting du forum URL Rewriting et .htaccess 16 Janvier 2006
Redirection 302 sur un forum phpbb avec url-rewriting URL Rewriting et .htaccess 17 Octobre 2005
Appliquer l'URL Rewriting à un forum SMF URL Rewriting et .htaccess 30 Août 2005
Url rewriting est-elle justifiée pour un forum ? Développement d'un site Web ou d'une appli mobile 26 Août 2005
URL Rewriting et forums Invision Board : une solution ? URL Rewriting et .htaccess 24 Août 2005
[RESOLU] L'apostrophe dans le titre d'un forum ave rewriting URL Rewriting et .htaccess 20 Juin 2005