• User Newbie

    Mod Rewrite Problema

    Salve a tutti,
    io ho un forum basato sul phpbb2 al quale ho applicato il modrewrite descritto della guida GT per l'ottimizzazione della board phpbb.

    Ora però con il popolarsi del forum e l'aumentare delle discussioni si è verificato il seguente problema:
    la traduzione dell'indirizzo da php a html non viene effettuata correttamente non permettendo la visualizzazione, in topic con più di una pagina, Infatti visualizzo correttamente solo la prima pagina.
    Se clicco sui rispettivi numeri di pag delle altre mi riappare sempre la prima pagina.

    Ho scoperto che il problema è dovuto al fatto che vengono aggiunti caratteri in più nella traduzione dell'indirizzo.
    Io mi ritrovo un indirizzo tradotto di questo tipo
    http://forum.laquartaera.it/-lord-necsus--vt59.html (prima pagina del topic, corretto)
    per la seconda pagina risulta:
    http://forum.laquartaera.it/2-vt59.html?**amp;**start=15.

    Come si può notare in grassetto, viene aggiunta la stringa amp; che falsa l'indirizzo. Infatti se lo tolgo la pagina 2 viene visualizzata correttamente.

    Spulciando nel forum ho trovato alcuni post riguardanti l'.htacces io ho il seguente:

    Options +FollowSymlinks 
    RewriteEngine On  
    #RewriteBase / 
    
    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 
    
    RewriteEngine on
    RewriteRule ^sitemap.xml$ sitemap.php 
    RewriteRule ^forum-([0-9]+).xml$ sitemap.php?fid=$1 
    ```Ora come faccio a risolvere questo problema? E' un problema del file .htacces oppure è sbagliato il codice di traduzione degli url presente nella guida?
    
    Grazie mille per l'aiuto.

  • Super User

    mamma mia che file htaccess brutto 🙂
    ho il portatile nuovo e devo ricompilare tutto, evito di postare codice non testato

    comunque, il problema è dato da chi genera gli indirizzi (il modulo rewrite di phpbb)

    non ho mai provato il rewrite su phpbb, appena ho sistemato la situazione gli do un'occhiata 😉


  • User Newbie

    :mmm: ehhh, ho seguito la guida di GT per l'ottimizzazione della phpboard http://www.giorgiotave.it/guida_forum/ottimizzazione_phpbb.php
    Poi, ammetto che di mio non ho molta pratica sull'uso di questo file e quindi essendo un po' preso male in questo periodo per via del poco tempo non ho approfondito più di tanto.

    Comunque grazie mille per la disponibilà 😉


  • User Newbie

    Questa mattina ho provato a smanettarci un po' su questo problema del mod rewrite.

    La guida GT dice:

    **Procedimento: **
    
      [LEFT]**APRITE** [/LEFT]
      [LEFT]    includes/page_header.php  [/LEFT]
      [LEFT]**CERCATE** [/LEFT]
      [LEFT]    $template->set_filenames(array( 
        'overall_header' => ( empty($gen_simple_header) ) ? 
    'overall_header.tpl' : 'simple_header.tpl') 
    );  [/LEFT]
      [LEFT]**APPENA DOPO, AGGIUNGETE QUESTE RIGHE** [/LEFT]
      [LEFT]    1 ob_start(); 
    
    2 function make_url_friendly($url) 
    3  { 
    
    4    $url = strtolower($url); 
    
    5    $find = array(' ', 
    6            '&', 
    7            '\r\n', 
    8           '\n', 
    9            '/', 
    10            '\\', 
    11            '+'); 
    
    12    $url = str_replace ($find, '-', $url); 
    
    13    $find = array(' ', 
    14            'é', 
    15            'è', 
    16            'ë', 
    17            'ê'); 
          
    18    $url = str_replace ($find, 'e', $url); 
          
    19    $find = array(' ', 
    20            'ó', 
    21            'ò', 
    22            'ô', 
    23            'ö'); 
          
    24    $url = str_replace ($find, 'o', $url); 
          
    25    $find = array(' ', 
    26            'á', 
    27            'à', 
    28            'â', 
    29            'ä'); 
          
    30    $url = str_replace ($find, 'a', $url); 
          
    31    $find = array(' ', 
    32            'í', 
    33            'ì', 
    34            'î', 
    35            'ï'); 
          
    36    $url = str_replace ($find, 'i', $url); 
          
    37    $find = array(' ', 
    38            'ú', 
    39            'ù', 
    40            'û', 
    41            'ü'); 
          
    42    $url = str_replace ($find, 'u', $url); 
          
    43    $find = array('/[^a-z0-9\-<>]/', 
    44            '/[\-]+/', 
    45            '/<[^>]*>/'); 
    
    46    $repl = array('', 
    47            '-', 
    48            ''); 
    
    49    $url =  preg_replace ($find, $repl, $url); 
    
    50    return $url; 
    
    51 } 
    
    
    52 function rewrite_urls($content) 
    53 { 
    
    54    function if_query($amp) 
    55    { 
    
    56        if($amp != '') 
    57        { 
    58            return '?'; 
    59        } 
    
    60    } 
    
    61   $url_in = array('/(?<!\/)viewforum.php\?f=([0-9]+)((&)
    62   |(&)){0,1}([^>]+>)(.*?)<\/a>/e', 
    63   '/(?<!\/)viewtopic.php\?p=([0-9]+)((&)
    64   |(&)){0,1}([^>]+>)(.*?)<\/a>/e', 
    65   '/(?<!\/)viewtopic.php\?t=([0-9]+)((&)
    66   |(&)){0,1}([^>]+>)(.*?)<\/a>/e'); 
    
    67   $url_out = array("make_url_friendly('\\6') . 
    68     '-vf\\1.html' . 
    69   if_query('\\2') . stripslashes('\\5\\6') . '</a>'", 
    70   "make_url_friendly('\\6') . '-vp\\1.html' 
    71    . if_query('\\2') 
    72   . stripslashes('\\5\\6') . '</a>'", 
    73   "make_url_friendly('\\6') . '-vt\\1.html' 
    74   . if_query('\\2') 
    75   . stripslashes('\\5\\6') . '</a>'"); 
    
    76    $content = preg_replace($url_in, $url_out, $content); 
    
    77    return $content;
    
    78  }
    
       [/LEFT]
    
    ```(Ho numerato le righe del codice che ci interessano per comodità)
    Ho effettuato delle prove nella riga 6 provando a far cercare il codice vero e proprio del carattere & ovvero &amp; per vedere se lo sostuiva ma anche in questo caso nell'url appare sempre quel amp; in più.
    Ho provato a mettere il solo amp; ma nemmeno in questo caso non è cambiato niente.
    
    Alla fine cercando di vedere che stringa veniva passata all'engine ho messo un echo:
    
    

    52 function rewrite_urls($content)
    53 {
    echo $content;
    54 function if_query($amp)
    55 {

    funziona. 
    L'echo non stampa niente ma gli indirizzi ora sono riscritti correttamente.
    Nessuna modifica al file .htaccess

  • User Newbie

    Errata Corridge:

    echo $content; mi replica tutta la pagina, quindi mi ritrovo una pagina doppia.

    Però l'indirizzamento funziona O.O


  • User Newbie

    Tra la riga 76 e 77 ho risolto aggiungendo il seguente codice e ovviamente togliendo il $echo inserito precedentemente:

    
    76    $content = preg_replace($url_in, $url_out, $content); 
           
          **  $ecc="/amp;/";
             $st="";
             $content = preg_replace($ecc,$st,$content);**
    
    77    return $content;
    
    ```Sembra funzionare e per il momento non si sono riscontrati problemi.

  • Super User

    mamma mia che codice incasinato 😞

    ho finito ieri sera di sistemare tutto, comunque se dovessi notare problemi scrivi pure 🙂

    ciao,
    Francesco


  • User

    Salve,

    ho installato il forum phpbb3.02 e vorrei mettere la mod rewrite.

    Ho letto mille articoli in materia ma sono nel pallone piu completo.

    Se qualcuno è disponibile a fare questo lavoro per me lo pago.

    Aspetto proposte

    Saluti

    Giuseppe