Se connecter avec
S'enregistrer | Connectez-vous

Rewriting / Php et les forum smf 1.1 béta 3 publique <-- un petit prob

Dernière réponse : dans Programmation

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 :

  1. // Rewrite URLs to include the session ID.
  2. function ob_sessrewrite($buffer)
  3. {
  4. global $scripturl, $modSettings, $user_info, $context;
  5.  
  6. // If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
  7. if ($scripturl == '' || !defined('SID'))
  8. return $buffer;
  9.  
  10. // 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.
  11. 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)
  12. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . ';', $buffer);
  13.  
  14. // This should work even in 4.2.x, just not CGI.
  15. if (!empty($modSettings['queryless_urls']) && (!$context['server']['is_cgi'] || @ini_get('cgi.fix_pathinfo') == 1) && $context['server']['is_apache'])
  16. {
  17. // Let's do something special for session ids!
  18. if (defined('SID') && SID != '')
  19. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html?' . SID . '\$2\"'", $buffer);
  20. else
  21. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
  22. }
  23.  
  24. // Return the changed buffer.
  25. return $buffer;
  26. }


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 :

  1. // Rewrite URLs to include the session ID.
  2. function ob_sessrewrite($buffer)
  3. {
  4. global $scripturl, $modSettings, $user_info, $context;
  5.  
  6. // If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
  7. if ($scripturl == '' || !defined('SID'))
  8. return $buffer;
  9.  
  10. // 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.
  11. if (empty($_COOKIE) && SID != '' && (!$user_info['is_guest'] || (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false)))
  12. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . '&', $buffer);
  13. // 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.
  14. else
  15. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+)(#[^"]*)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
  16.  
  17. // Return the changed buffer.
  18. return $buffer;
  19. }


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 :

  1. RewriteEngine On
  2. RewriteRule ^topic-([^/]+)[/]?$ /forum/index.php?topic=$1
  3. RewriteRule ^board-([^/]+)[/]?$ /forum/index.php?board=$1


Mais rien ne fais ... erreur 404 :'( 

version du forum : 1.1 beta 3 public

:?: Pourriez vous m'aider :?:
Lassé par la pub ? Créez un compte

je m'étais pas préocupé de la réécriture d'url quand je tournais avec la version stable 1.0.5 .

Donc je ne peux pas te dire.

Cependant ce que je peux dire c'est que les utilisateurs utilisant 1.1 béta 3 public, cela marche bien même si quelques uns ont eut des problemes liés je le pensse a la configuration de leur serveur.

Tout mon script est en version 1.1 béta 3 sauf le template ..... que j'ai modifié. Le probleme de réinstaller la version précédente, c'est que je perdrai pas mal de mods et de fonctions que j'ai rajouté dans les sources.

Il n'y a qu'un tout petit grains de sables qui coince le rouage.

...... il y à aussi des fichiers qui sont liés directement à la fonction de rewrite()

voila les fichiers qui se trouve dans forum/source/

BoardIndex.php
Display.php
MessageIndex.php

une personne nommé BA3R à fait la réflection suivante :

chercher et remplacer dans ses 3 fichiers ce bout de code qui est employé plusieurs fois :

  1. '<a href="' . $scripturl . '?topic=' .


par :

  1. '<a href="' . $scripturl2 . '/topic-' .


Puis de définir la variable dans l'index ( at ze top )

  1. $scripturl2 = '/';


et de déclarer la variable dans display.php en remplaçant :

  1. global $scripturl, $txt, $db_prefix, $modSettings, $context, $settings, $options, $sourcedir;


par :

  1. global $scripturl, $scripturl2, $txt, $db_prefix, $modSettings, $context, $settings, $options, $sourcedir;



Ensuite ils ont fait une erreure dans la variable ( rappel : $scripturl2 )

au lieu de :

  1. '<a href="' . $scripturl2 . '/topic-' .


on devrai mettre

  1. '<a href="' . $scripturl2 . 'http://www.server.comforum/topic-' .


J'en suis là et je ne dormirai pas tant que cette affaire n'est pas bouclé3 !

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 :

  1. // Rewrite URLs to include the session ID.
  2. function ob_sessrewrite($buffer)
  3. {
  4. global $scripturl, $modSettings, $user_info, $context;
  5.  
  6. // If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
  7. if ($scripturl == '' || !defined('SID'))
  8. return $buffer;
  9.  
  10. // 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.
  11. 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)
  12. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . ';', $buffer);
  13.  
  14. // This should work even in 4.2.x, just not CGI.
  15. if (!empty($modSettings['queryless_urls']) && (!$context['server']['is_cgi'] || @ini_get('cgi.fix_pathinfo') == 1) && $context['server']['is_apache'])
  16. {
  17. // Let's do something special for session ids!
  18. if (defined('SID') && SID != '')
  19. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html?' . SID . '\$2\"'", $buffer);
  20. else
  21. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
  22. }
  23.  
  24. // Return the changed buffer.
  25. return $buffer;
  26. }


par :

  1. // Rewrite URLs to include the session ID.
  2. function ob_sessrewrite($buffer)
  3. {
  4. global $scripturl, $modSettings, $user_info, $context;
  5.  
  6. // If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
  7. if ($scripturl == '' || !defined('SID'))
  8. return $buffer;
  9.  
  10. // 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.
  11. if (empty($_COOKIE) && SID != '' && (!$user_info['is_guest'] || (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false)))
  12. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . '&', $buffer);
  13. // 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.
  14. else
  15. $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+)(#[^"]*)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
  16.  
  17. // Return the changed buffer.
  18. return $buffer;


ensuite ajouter cette ligne à http://www.serveur.com/forum/index.php :

  1. $scripturl2 = '/';


juste après :

  1. // Get everything started up...
  2. define('SMF', 1);
  3. @set_magic_quotes_runtime(0);
  4. error_reporting(E_ALL);
  5. $time_start = microtime();


Ligne 37 environ

ensuite :

Editez ces 3 fichiers :

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


Remplacer les expressions contenant :

  1. '<a href="' . $scripturl . '?topic=' .


par :

  1. '<a href="' . $scripturl . '/forum/topic-' .


puis toujours dans ces fichiers

  1. '<a href="' . $scripturl . '?board=' .


par :

  1. '<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 :

  1. ?board=


remplacer les par :

  1. /forum/board-


idem pour les codes contenant :

  1. ?topic=


changer par :

  1. /forum/topic-


ensuite il faudra déclarer la variable globale dans vos fichiers ****.template.php comme ceci

  1. 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 ) :

  1. RewriteEngine On
  2. RewriteRule ^topic-([^/]+)[/]?$ /forum/index.php?topic=$1 [L]
  3. 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

Lassé par la pub ? Créez un compte
  • Contenus similaires :
Tags :