sitemap dinamica/htaccess/xml

Ciao,

ho creato una sitemap dinamica in php/mysql.

ho impostato la regola in htaccess per rendere il file digeribile a google.

RewriteEngine On RewriteRule ^sitemap.xml$ sitemap.php [L]

Però inviando la sitemap a GG, mi dice che il formato non è riconosciuto, cioè è come se non vedesse l'estensione "mascherata" .xml

il rewriteRule forse non è corretto?

inviato 5 anni fa
iTek
iTek
1
X 0 X

Il file sitemap.php produce un output text/xml ?

Se non hai preso nessuna misura per forzare questo tipo di output, ti consiglio di usare la funzione header per settare l'attributo Content-type in maniera adeguata.

risposto 5 anni fa
s.rotondo
X 0 X

ciao, grazie per la risposta.

io avevo messo header('Content-Type: text/xml'); all'inizio della pagina, ma poi l'ho tolto perchè mi restituiva questi errori:

This page contains the following errors:

error on line 3 at column 1: Document is empty

error on line 3 at column 1: Encoding error

Below is a rendering of the page up to the first error.

la riga 3 riguarda proprio l'header.

soluzioni?

risposto 5 anni fa
iTek
iTek
1
X 0 X

A naso mi sembra che quelli siano gli errori di google: non si riferiscono alle righe nell'area di lavoro php ma all'output, quindi alla struttura del tuo documento xml.

Verifica quindi che l'output generato da sitemap.php sia un documento XML valido come sintassi e struttura.

Dai un occhio qui: http://www.sitemaps.org/protocol.php

risposto 5 anni fa
s.rotondo
X 0 X

ho l'impressione che il problema sia nella definizione dell'encoding della pagina perchè il resto l'ho controllato e mi sembra a posto.

come faccio a parsare questo?

<?php
echo' <?xml version="1.0" encoding="UTF-8"?>';
?>

ho provato a sostituire i >< con &lt e &gt ma non sembra funzionare

ti posto com'è la pagina:

<?php
header('Content-Type: text/xml');
echo'
&lt?xml version="1.0" encoding="UTF-8"?&gt
<urlset
      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';
$query = "SELECT cat_id, cat_parent_id, cat_name
          FROM tbl_category
          WHERE cat_parent_id = 0";

 $result = dbQuery($query);
 while($row = dbFetchAssoc($result)) {
        extract($row);

 $lastmod = date("c");
  $priority = 0.5;
  $changefreq = 'monthly';
echo"
  <url>
  <loc>".$link."</loc>
  <lastmod>".$lastmod."</lastmod>
  <priority>".$priority."</priority>
  <changefreq>".$changefreq."</changefreq>
  </url>";

}

echo"</urlset>";
risposto 5 anni fa
iTek
iTek
1
X 0 X

Specifica nell'header anche il charset:

header('Content-Type: text/xml; charset=utf-8');

Inoltre, controlla che il file sitemap.php sia effettivamente salvato con codifica utf-8.

risposto 5 anni fa
s.rotondo
X 0 X

la pagina è correttamente formattata in UTF-8 e il tipo è text/xml

ho provato ad aprire la pagina con FF e il tipo di errore che mi da è più indicativo:

Errore interpretazione XML: non well-formed

Linea numero 2, colonna 1:

&lt?xml version="1.0" encoding="UTF-8"?&gt

^

quindi è come pensavo, cioè il trucco per evitare all'interprete php di parsare il codice xml, non funziona.

Quindi, come ho scritto prima, come posso parsare quel codice?

<?php
echo' <?xml version="1.0" encoding="UTF-8"?>'; 
?>

:buck:

risposto 5 anni fa
iTek
iTek
1
X 0 X

Non ti serve usare le entità, php non parsa spontaneamente quei tag.

risposto 5 anni fa
s.rotondo
X 0 X

e quindi?

cosa dovrei fare per quella riga? cioè, non credo di essere il primo che crea una sitemap dinamica, e quindi trovarsi davanti a questo problema... ho provato a vedere in giro, ma non ho trovato nulla di specifico su questo problema.

 >:(

risposto 5 anni fa
iTek
iTek
1
X 0 X

non devi inserire spazi prima della specifica dell'encoding in xml:

echo '<?xml version="1.0" encoding="UTF-8"?>';
risposto 5 anni fa
s.rotondo
X 0 X

il problema è la chiusura del encoding xml ?> che php lo interpreta come se fosse la chiusura dell'interprete, quindi mi blocca l'esecuzione dello script dandomi errore di parsing....

risposto 5 anni fa
iTek
iTek
1
X 0 X

Disattiva short_open_tag

Quindi potrai usare tranquillamente i tag xml.

Ovviamente dovrai usare sempre <?php per aprire i tag php (non dovrebbe essere un grosso sforzo)

risposto 5 anni fa
Massimiliano Arione
X 0 X

si, ho visto che sul server short_open_tag è su ON, ma non posso intervenire sull' .ini

ho tolto quella riga xml dalla pagina e google mi ha accettato la sitemap.

boh! è indispensabile che ci sia?  forse è sufficiente

header('Content-Type: text/xml; charset=iso-8859-1');

dato  che GG me l'ha accettato...che dici?

risposto 5 anni fa
iTek
iTek
1
X 0 X

Puoi inserire alcune direttive (tra cui short_open_tag) anche in .htaccess

Se proprio non ci riesci, questa è una soluzione, bruttissima ma funzionante:

<<??>?xml version="1.0" encoding="utf-8"?>
risposto 5 anni fa
Massimiliano Arione
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda