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 & 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