<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simone Carletti&#039;s Blog &#187; Server / Apache</title>
	<atom:link href="http://www.simonecarletti.it/blog/categories/server-apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.simonecarletti.it/blog</link>
	<description>Un piccolo spazio nel web con approfondimenti su programmazione, feed, motori di ricerca e marketing.</description>
	<lastBuildDate>Mon, 03 Oct 2011 14:40:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Come reindirizzare una pagina rimuovendo il tracciamento di Google Analytics</title>
		<link>http://www.simonecarletti.it/blog/2009/02/come-reindirizzare-una-pagina-rimuovendo-il-tracciamento-di-analytics/</link>
		<comments>http://www.simonecarletti.it/blog/2009/02/come-reindirizzare-una-pagina-rimuovendo-il-tracciamento-di-analytics/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 16:11:03 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[redirect]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/?p=2550</guid>
		<description><![CDATA[Alcune regole di configurazione di Apache per reindirizzare una pagina oggetto di una campagna rimuovendo la querystring.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-2521" title="Screenshot Google Analytics" src="http://www.simonecarletti.it/blog/wp-content/uploads/2009/02/google-analytics-screenshot-150x150.png" alt="Screenshot Google Analytics" width="150" height="150" />Da qualche giorno i principali motori di ricerca hanno siglato un accordo introducendo il <a href="http://blog.html.it/16/02/2009/google-yahoo-e-microsoft-si-accordano-sul-canonical-link/">canonical link tag</a> nel tentativo di trovare una possibile soluzione al fenomeno delle <strong>pagine con multiple URL</strong>.</p>
<p>Una delle situazioni più comuni che rientrano in questo caso è rappresentata dalle <strong>pagine oggetto di campagne online</strong>. Il <strong>canonical link</strong> è un compromesso molto recente e supportato solo da un ristretto numero di motori di ricerca. Nell&#8217;incertezza, qualcuno preferisce ancora ricorrere al buon vecchio metodo dell&#8217;<strong>URL rewrite e del redirect</strong>.</p>
<p>Questa mattina mi ha citofonato <a title="YoYo - Formazione rotolante" href="http://www.yoyoformazione.it/">Francesco</a>, intento a risolvere proprio questa situazione. Tutto nasce dal problema che non è possibile utilizzare <code>mod_alias</code> per impostare un redirect basato su un parametro in querystring. Per approfondimenti vi rimando all&#8217;articolo <a title="Apache .htaccess query string redirects" href="http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/">Apache .htaccess query string redirects</a>.</p>
<p>Per la gioia di chi non ama gli indovinelli, ecco <strong>la soluzione al problema</strong>.</p>
<p><span id="more-2550"></span>Il codice seguente è una <strong>regola di riscrittura di Apache</strong>. Può essere inserita direttamente nel file di configurazione del virtual host o all&#8217;interno dell&#8217;<code>.htaccess</code>. Nel caso la querystring contenga un parametro di Google Analytics per il tracciamento di una campagna, esegue il reindirizzamento alla pagina a se stessa rimuovendo la querystring.</p>
<pre>RewriteEngine On
RewriteCond %{QUERY_STRING} utm_source=(.*?)   [OR]
RewriteCond %{QUERY_STRING} utm_medium=(.*?)   [OR]
RewriteCond %{QUERY_STRING} utm_content=(.*?)  [OR]
RewriteCond %{QUERY_STRING} utm_campaign=(.*?)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1? [R=301,L]</pre>
<p>Se desiderate eseguire la riscrittura forzata per una pagina specifica o un gruppo di pagine, è sufficiente aggiungere una condizione sulla pagina richiesta. L&#8217;esempio seguente applica il redirect solo nel caso in cui i parametri si trovino sulla query string della homepage.</p>
<pre>RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} utm_source=(.*?)   [OR]
RewriteCond %{QUERY_STRING} utm_medium=(.*?)   [OR]
RewriteCond %{QUERY_STRING} utm_content=(.*?)  [OR]
RewriteCond %{QUERY_STRING} utm_campaign=(.*?)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1? [R=301,L]</pre>
<p>Altre soluzioni o suggerimenti sono ben accetti. Segretamente, Francesco mi ha confessato che alla soluzione migliore regalerà un <strong>viaggio premio in Brasile</strong> per assistere al Carnevale di Rio.</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2006/09/proposta-reindirizzare-un-feed-senza-http-301/' rel='bookmark' title='Proposta: reindirizzare un feed senza HTTP 301'>Proposta: reindirizzare un feed senza HTTP 301</a></li>
<li><a href='http://www.simonecarletti.it/blog/2009/02/google-analytics-head-o-body/' rel='bookmark' title='Google Analytics: nell&#8217;head o nel body?'>Google Analytics: nell&#8217;head o nel body?</a></li>
<li><a href='http://www.simonecarletti.it/blog/2006/04/invito-google-analytics-li-invia-solo-google/' rel='bookmark' title='Invito Google Analytics: li invia solo Google!'>Invito Google Analytics: li invia solo Google!</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2009/02/come-reindirizzare-una-pagina-rimuovendo-il-tracciamento-di-analytics/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Come restituire HTTP Status Code specifici con Apache e .htaccess</title>
		<link>http://www.simonecarletti.it/blog/2009/02/come-restituire-http-status-code-con-apache/</link>
		<comments>http://www.simonecarletti.it/blog/2009/02/come-restituire-http-status-code-con-apache/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 09:18:23 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[htto 302]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[http 301]]></category>
		<category><![CDATA[http 410]]></category>
		<category><![CDATA[http 500]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/?p=2482</guid>
		<description><![CDATA[Una raccolta di esempi e documentazione per restituire http status code con Apache e .htaccess.]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2817 alignleft" title="Apache Logo" src="http://www.simonecarletti.it/blog/wp-content/uploads/2009/09/apache-logo.png" alt="Apache Logo" width="100" height="100" /> Sia di <strong>Apache e <code>.htaccess</code></strong>, sia di <strong>http status code</strong> ho già avuto modo di parlare a più riprese su questo blog, in lungo ed in largo. Vorrei però tornare nuovamente sull&#8217;argomento proponendo un riepilogo di <strong>come restituire i principali status code</strong> via <code>.htaccess</code> cercando di uscire dalla banalità dei soliti e ben noti Redirect 301 e Redirect 302.</p>
<p>Prendete questo articolo come una sorta di cheatsheet, una raccolta di esempi per restituire http status code con Apache e <code>.htaccess</code>. L&#8217;articolo non è cortissimo, ho deciso di dividerlo in 4 pagine. Il link per la navigazione delle pagine è disponibile al fondo di ogni pagina, prima dei commenti.<span id="more-2482"></span></p>
<h2>Requisiti e Premesse</h2>
<p>Poiché il focus di questo articolo è squisitamente tecnico, partirò dal presupposto che conosciate almeno le basi del funzionamento di Apache e le caratteristiche essenziali del file <code>.htaccess</code>.<br />
Inoltre, non mi soffermerò a dettagliare il significato di ogni status code, delegando invece alla <a title="HTTP/1.1: Status Code Definitions" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">documentazione ufficiale</a> eventuali approfondimenti.</p>
<h2>Classificazione degli status code HTTP</h2>
<p>Gli HTTP Status code sono normalmente classificati per tipo di risposta e si suddividono in:</p>
<ol>
<li>Informational</li>
<li>Successful</li>
<li>Redirection</li>
<li>Client Error</li>
<li>Server Error</li>
</ol>
<p>Il quarto e quinto insieme possono essere identificati in un colpo solo come <code>Error Responses</code>. Ecco lo schema riassuntivo, presente nella definizione del file sorgente di Apache che indica anche, per ogni classe di status code, il suo range di valori.</p>
<pre class="code-c">/** is the status code informational */
#define ap_is_HTTP_INFO(x)     (((x) &gt;= 100)&amp;&amp;((x) &lt; 200))
/** is the status code OK ?*/
#define ap_is_HTTP_SUCCESS(x)    (((x) &gt;= 200)&amp;&amp;((x) &lt; 300))
/** is the status code a redirect */
#define ap_is_HTTP_REDIRECT(x)   (((x) &gt;= 300)&amp;&amp;((x) &lt; 400))
/** is the status code a error (client or server) */
#define ap_is_HTTP_ERROR(x)    (((x) &gt;= 400)&amp;&amp;((x) &lt; 600))
/** is the status code a client error  */
#define ap_is_HTTP_CLIENT_ERROR(x) (((x) &gt;= 400)&amp;&amp;((x) &lt; 500))
/** is the status code a server error  */
#define ap_is_HTTP_SERVER_ERROR(x) (((x) &gt;= 500)&amp;&amp;((x) &lt; 600))
/** is the status code a (potentially) valid response code?  */
#define ap_is_HTTP_VALID_RESPONSE(x) (((x) &gt;= 100)&amp;&amp;((x) &lt; 600))</pre>
<p>Al fine del nostro articolo gli insiemi di status code più interessanti sono i redirect e gli errori. Gli altri casi denotano richieste processate  secondo il <strong>normale flusso</strong> previsto dal web server e difficilmente ci troveremo ad impostare a mano uno di questi valori.</p>
<h2>HTTP Redirect</h2>
<p>Come anticipato in apertura, non mi dilungherò troppo per quanto riguarda gli status code di reindirizzamento. I due più importanti sono l&#8217;<code>HTTP 301</code> e l&#8217;<code>HTTP 302</code>. Entrambi possono essere impostati utilizzando sia il <code>mod_alias</code>, sia il cugino <code>mod_rewrite</code>.</p>
<h3>Redirect con mod_alias</h3>
<p>Nel primo caso è sufficiente indicare il tipo di redirect dopo al comando di reindirizzamento, come segue.</p>
<pre class="code-apache">Redirect temp /old http://site.com/new
Redirect permanent /old http://site.com/new</pre>
<p>Entrambe le direttive accettano anche il rispettivo status code.</p>
<pre class="code-apache">Redirect 302 /old http://site.com/new
Redirect 301 /old http://site.com/new</pre>
<p>Nel caso in cui né lo status code né la sua descrizione sia presente, Apache imposta il tipo di redirect a <code>302</code>.</p>
<p>Altrettanto interessante, <code>mod_alias</code> supporta anche lo status di reindirizzamento <code>seeother</code>, rappresentato dal valore <code>303</code>.</p>
<pre class="code-apache">Redirect 303 /old http://site.com/new
Redirect seeother /old http://site.com/new</pre>
<p>Tutte le direttive sopra descritte sono ugualmente supportate dal comando <code>RedirectMatch</code>.</p>
<pre class="code-apache">Redirect 301        /old/(.*) http://site.com/new/$1
Redirect permanent  /old/(.*) http://site.com/new/$1
Redirect 302        /old/(.*) http://site.com/new/$1
Redirect temp       /old/(.*) http://site.com/new/$1
Redirect 303        /old/(.*) http://site.com/new/$1
Redirect seeother   /old/(.*) http://site.com/new/$1</pre>
<p><code>mod_alias</code> mette anche a disposizione alcune scorciatoie per i due tipi di redirect più diffusi.</p>
<pre class="code-apache">  Redirect 301      /old http://site.com/new
  RedirectPermanent /old http://site.com/new

  Redirect 302      /old http://site.com/new
  RedirectTemp      /old http://site.com/new</pre>
<h3>Redirect con mod_rewrite</h3>
<p>La sintassi per eseguire un redirect con <code>mod_rewrite</code> è altrettanto semplice. E&#8217; sufficiente scrivere una regola di rewrite ed appendere al fondo il flag <code>[R=XXX]</code> sostituendo <code>XXX</code> con lo status code desiderato.</p>
<pre class="code-apache">RewriteRule       /old http://site.com/new
RewriteRule       /old http://site.com/new
RewriteRule       /old/(.*) http://site.com/new/$1 [R=301]
RewriteRule       /old/(.*) http://site.com/new/$1 [R=302]</pre>
<p>A differenza di mod_alias, se il flag è omesso <strong>la richiesta viene riscritta e non reindirizzata</strong>.</p>
<h2>HTTP Client Error</h2>
<p>L&#8217;insieme dei client error, identificato dal range <code>&gt;= 400 &amp;&amp; &lt; 500</code>, è probabilmente quello con maggiori applicazioni pratiche ed anche il più interessante.</p>
<h3>HTTP 404</h3>
<p>Cominciamo con il più diffuso dei codici di errore, l&#8217;<code>HTTP 404</code>. Il modo più efficace per restituirlo&#8230; è cancellare il contenuto dell&#8217;indirizzo. E&#8217; difficile che vi troviate a dover restituire un errore HTTP 404 via Apache, ma se questo fosse il vostro caso allora una soluzione è creare una pagina dinamica, ad esempio in PHP, e riscrivere l&#8217;indirizzo per puntare a quella pagina.</p>
<p>Ecco il contenuto del file <code>404.php</code>:</p>
<pre class="code-php">&lt;?php
header("HTTP/1.0 404 Not Found");</pre>
<p>Ed ecco come riscrivere la pagina <code>old.php</code> affinché ritorni un errore 404.</p>
<pre class="code-apache">RewriteRule ^old\.php$ 404.php [L]</pre>
<h3>HTTP 401</h3>
<p>Anche per impostare un errore <code>HTTP 401</code> possiamo affidarci al modulo <code>mod_rewrite</code> ed a una pagina personalizzata, proprio come descritto per l&#8217;errore <code>HTTP 404</code>.</p>
<p>E&#8217; anche possibile impostare una <code>basic auth</code> per il percorso che intendiamo proteggere. In caso l&#8217;utente non fornisca le credenziali corrette, Apache restituirà in automatico un errore 401.</p>
<h3>HTTP 403</h3>
<p>Come per i precedenti, anche per l&#8217;<code>HTTP 403</code> utilizziamo <code>mod_rewrite</code> ma questa volta Apache ci mette a disposizione lo speciale flag <code>[F]</code>.</p>
<pre class="code-apache">RewriteRule ^folder/(.*)$ - [F,L]</pre>
<p>Il primo parametro contiene il <code>path</code> da proteggere, il secondo è invece un semplice trattino <code>-</code>. Si utilizza quando non si desidera riscrivere <code>path</code> ma solo sfruttare <code>RewriteRule</code> per appendere dei flag alla request.</p>
<p>L&#8217;alternativa è utilizzare le direttive di raggruppamento <code>Files</code>, <code>FilesMatch</code>, <code>Directory</code>, <code>DirectoryMatch</code> e <code>Location</code> per modificare le impostazioni di accesso attraverso i comandi <code>Order</code> e <code>Deny</code>. L&#8217;esempio seguente dimostra come restituire un errore 403 quando l&#8217;utente tenta di accedere ad una cartella speciale di SVN.</p>
<pre class="code-apache">&lt;DirectoryMatch "^/.*/\.svn/"&gt;
  Order allow,deny
  Deny from all
  Satisfy All
&lt;/DirectoryMatch&gt;</pre>
<h3>HTTP 410</h3>
<p>L&#8217;ultimo status della categoria client error che vale la pena considerare è lo status HTTP 410. All&#8217;argomento ho dedicato un post speciale qualche giorno fa, intitolato <a title="Serve a qualcosa lo status HTTP 410? -  Simone Carletti’s Blog" href="http://www.simonecarletti.it/blog/2009/02/serve-a-qualcosa-lo-status-http-410/">Serve a qualcosa lo status HTTP 410?</a>.</p>
<p>Anche in questo caso, possiamo procedere sia con <code>mod_alias</code>, sia con <code>mod_rewrite</code>.<br />
Ad esempio, ecco come possiamo indicare che il feed <code>atom.xml</code> del nostro blog non è più disponibile.</p>
<pre class="code-apache"># le seguenti righe sono equivalenti nel risultato
Redirect 410  /blog/atom.xml
Redirect gone /blog/atom.xml
RewriteRule   ^blog/atom.xml$ - [G,L]</pre>
<h2>Server Error</h2>
<p>Perché mai dovremmo voler restituire uno status code che identifica un errore del server? Non bastano da soli i famosi errori 500 causati di norma dai bug senza che ci mettiamo del nostro per restituire questo genere di errori?</p>
<p>Un&#8217;esempio eccellente è possibile ritrovarlo in un <a title="Nuovo design - Nel frattempo… | Petro" href="http://www.mauriziopetrone.com/blog/nuovo-design-manutenzione/">post di Maurizio</a>, con tanto di <a href="http://groups.google.com/group/Google_Webmaster_Help-Indexing/msg/eba8f8b75ee60a93">conferma ufficiale</a> da parte di Google. In breve, se state eseguendo operazioni di manutenzione sul server può essere utile restituire temporaneamente un errore 503.</p>
<p>Proprio da questo caso vorrei partire con due esempi. Il primo, ripreso direttamente dal blog di Maurizio, dimostra come è possibile utilizzare la strategia prima descritta per <code>404</code> e <code>401</code> per ottenere uno status code <code>503</code> per qualsiasi pagina del sito.</p>
<pre class="code-apache">RewriteCond %{REQUEST_URI} !^/errors/503/index\.php [NC]
RewriteRule .* /503.php</pre>
<pre class="code-php">&lt;?php
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Retry-After: 3600');</pre>
<p>Il secondo esempio è invece un estratto da una regola installata sui nostri server di produzione necessaria al funzionamento di Capistrano per Ruby on Rails. In questo caso, la sintassi è più complessa ma dimostra come ottenere lo stesso risultato con il solo uso di Apache senza eventuali file php esterni.</p>
<pre class="code-apache"># Maintenance Page
# Handle the HTTP 503 status code with a special page
# and send Retry-After header in case of maintenance.
ErrorDocument 503 /errors/503.html

&lt;LocationMatch "/errors/503\.html"&gt;
  Header set Retry-After "3600"
&lt;/LocationMatch&gt;  

# for the maintenance time
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !503\.html
<img class="alignleft size-full wp-image-2817" title="Apache Logo" src="http://www.simonecarletti.it/blog/wp-content/uploads/2009/09/apache-logo.png" alt="Apache Logo" width="100" height="100" />RewriteRule ^.*$ /errors/503.html [R=503,L]</pre>
<h2>In conclusione</h2>
<p>Conoscere ed utilizzare gli HTTP status code nel modo corretto è un requisito imprescindibile per chi lavora a stretto contatto con pagine web, web server ma soprattutto client come i motori di ricerca.<br />
Se fino ad oggi non avevato ancora approfondito l&#8217;argomento, questa è la volta buona per sgranocchiare un po&#8217; di documentazione.</p>
<p>Questo articolo dovrebbe darvi le indicazioni necessarie per gestire attraverso Apache e <code>.htaccess</code> i principali HTTP status code.<br />
Per verificare il risultato dei vostri esperimenti potete usare l&#8217;<a title="HTTP Headers Checker - Simone Carletti" href="http://www.simonecarletti.com/tools/http-checker">HTTP Status Code checker</a> disponibile su questo sito.</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2007/05/importanti-aggiornamenti-al-tool-http-headers-status-checker/' rel='bookmark' title='Importanti aggiornamenti al tool HTTP Headers Status Checker'>Importanti aggiornamenti al tool HTTP Headers Status Checker</a></li>
<li><a href='http://www.simonecarletti.it/blog/2009/02/serve-a-qualcosa-lo-status-http-410/' rel='bookmark' title='Serve a qualcosa lo status HTTP 410?'>Serve a qualcosa lo status HTTP 410?</a></li>
<li><a href='http://www.simonecarletti.it/blog/2006/09/guida-per-impostare-un-redirect-301/' rel='bookmark' title='Guida per impostare un redirect 301'>Guida per impostare un redirect 301</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2009/02/come-restituire-http-status-code-con-apache/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Serve a qualcosa lo status HTTP 410?</title>
		<link>http://www.simonecarletti.it/blog/2009/02/serve-a-qualcosa-lo-status-http-410/</link>
		<comments>http://www.simonecarletti.it/blog/2009/02/serve-a-qualcosa-lo-status-http-410/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 23:30:08 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Motori di Ricerca]]></category>
		<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[http 410]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/?p=760</guid>
		<description><![CDATA[Risultati di un test per verificare il comportamento di crawler e client in caso di status HTTP 410.]]></description>
			<content:encoded><![CDATA[<p>In questo post vorrei esporre i risultati di un esperimento condotto l&#8217;anno scorso. Obiettivo del test era verificare il <strong>comportamento di crawler e client in caso di status <code>HTTP 410</code></strong>.</p>
<h2>Che cos&#8217;è lo status HTTP 410?</h2>
<p>Come ben saprà chi legge abitualmente questo blog o si interessa di server, un server può restituire diversi <strong>status code</strong> in risposta ad una richiesta di una pagina web. Tra gli status code pià famosi troviamo</p>
<ul>
<li><code>HTTP 200</code> in caso di risposta completata con successo</li>
<li><code>HTTP 404</code> in caso di risorsa non trovata</li>
<li><code>HTTP 403</code> in caso di accesso non consentito</li>
</ul>
<p>Lo status code restituito da un server è fondamentale e determina il <strong>risultato di una risposta HTTP</strong>. Parlando di motori di ricerca, <strong>lo status code influenza il posizionamento</strong> di una pagina così come la sua indicizzazione.</p>
<p><span id="more-760"></span>Lo status code <code>410</code> rappresenta la risposta in caso di <strong>risorsa non più disponibile</strong>. La sua definizione tecnica è <code>HTTP 410 Gone</code>. Per certi versi è molto simile al <code>404</code> poiché entrambi identificano una risorsa irraggiungibile, tuttavia esiste una differenza non banale:</p>
<ul>
<li>lo status code <code>404</code> indica una risorsa non disponibile.</li>
<li>lo status code <code>410</code> indica una risorsa <strong>non più disponibile</strong>.</li>
</ul>
<p>In altre parole, lo status code <code>410</code> implica che a quell&#8217;indirizzo prima fosse disponibile una risorsa che, al momento, è stata rimossa. Al contrario, lo status code <code>404</code> non fornisce questo dettaglio: l&#8217;indirizzo richiesto forse non ha mai ospitato una risorsa, forse sì&#8230; non si sa.</p>
<p>Agli occhi della maggior parte dei client <strong>ciò che conta è il risultato</strong>. In entrambi i casi ci troviamo di fronte ad una risorsa non disponibile e l&#8217;errore va gestito. Alcuni software rimuovono la risorsa dai propri indici, altri la nascondono, altri ancora mettono in atto azioni correttive per verificare un&#8217;eventuale collocazione alternativa.</p>
<p>La maggior parte dei motori di ricerca afferma di gestire lo status code <code>410</code> allo stesso modo del <code>404</code>. Obiettivo del mio test era verificare quest&#8217;affermazione sfruttando la necessità di voler rimuovere un feed non più disponibile.</p>
<h2>Numero di richieste HTTP</h2>
<p>Il grafico seguente riassume le richieste HTTP inviate alla pagina <code>/atom.xml</code> prima e dopo l&#8217;impostazione dello status code <code>HTTP 410</code>, il 5 Ottobre 2008.</p>
<p>Nota. <em>Per ingrandire i valori potete con il mouse selezionare una porzione del grafico. Lo script provvederà ad ingrandire a schermo solo il range che avete evidenziato.</em></p>
<p><script src="/blog/charts/amline/swfobject.js" type="text/javascript"></script></p>
<div id="flashcontent"><strong>You need to upgrade your Flash Player</strong></div>
<p><script type="text/javascript">// <![CDATA[
  var so = new SWFObject("http://www.simonecarletti.it/blog/charts/amline/amline.swf", "amline", "520", "400", "8", "#FFFFFF"); so.addVariable("path", "http://www.simonecarletti.it/blog/charts/amline/"); so.addVariable("settings_file", encodeURIComponent("http://www.simonecarletti.it/blog/wp-content/uploads/2009/02/amline_settings.txt")); so.addVariable("data_file", encodeURIComponent("http://www.simonecarletti.it/blog/wp-content/uploads/2009/02/amline_data.txt")); so.write("flashcontent");
// ]]&gt;</script></p>
<h2>I risultati</h2>
<p>Analizzando i risultati dell&#8217;esperimento è possibile osservare diversi comportamenti curiosi. Ecco alcune mie considerazioni, in ordine sparso.</p>
<ol>
<li>Contrariamente ad ogni mia aspettativa, lo status <code>HTTP 410</code> è supportato da una buona fetta dei client web: crawler, motori di ricerca, parser&#8230; E&#8217; possibile notare come, nel giro di qualche giorno, le richieste alla pagina sono diminuite sensibilmente.</li>
<li>A differenza dello status <code>HTTP 404</code>, lo status <code>HTTP 410</code> ha un <strong>effetto quasi immediato</strong>. Teoricamente parlando questo ha un senso ma, anche in questo caso, non mi sarei aspettato una così concreta aderenza alle specifiche. Il motivo per il quale l&#8217;<code>HTTP 410</code> è così immediato è da ricercare nel suo significato: la volontà di azione. A differenza del <code>404</code> che potrebbe essere casuale o involontario, l&#8217;<code>HTTP 410</code> non è uno status code predefinito e viene impostato deliberatamente. Questa sottile differenza autorizza il client ad agire senza eccessivi controlli aggiuntivi, come avviene invece nel caso di un <code>HTTP 404</code>.</li>
<li>A differenza dello status <code>HTTP 404</code>, buona parte dei client mette in atto un processo di rimozione irreversibile. In altre parole, una volta appurata la non disponibilità della risorsa, i client limitano i controlli periodici ad una frequenza inferiore a quella normalmente prevista per un <code>HTTP 404</code>.</li>
</ol>
<p>In conclusione, direi che è possibile affermare con una discreta certezza che l&#8217;<strong><code>HTTP 410</code> è efficace</strong>. Inoltre, sembra essere dimostrato che per rimuovere velocemente una pagina dalla rete <strong>questo status code rappresenta</strong> una soluzione più efficace rispetto alla semplice cancellazione del file dal server e conseguente <code>HTTP 404</code>.</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2009/02/come-restituire-http-status-code-con-apache/' rel='bookmark' title='Come restituire HTTP Status Code specifici con Apache e .htaccess'>Come restituire HTTP Status Code specifici con Apache e .htaccess</a></li>
<li><a href='http://www.simonecarletti.it/blog/2007/05/importanti-aggiornamenti-al-tool-http-headers-status-checker/' rel='bookmark' title='Importanti aggiornamenti al tool HTTP Headers Status Checker'>Importanti aggiornamenti al tool HTTP Headers Status Checker</a></li>
<li><a href='http://www.simonecarletti.it/blog/2007/05/strumenti-seo-http-headers-status-checker/' rel='bookmark' title='Strumenti SEO: HTTP Headers Status Checker'>Strumenti SEO: HTTP Headers Status Checker</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2009/02/serve-a-qualcosa-lo-status-http-410/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>L&#8217;architettura di Wikipedia nel dettaglio</title>
		<link>http://www.simonecarletti.it/blog/2007/08/larchitettura-di-wikipedia-nel-dettaglio/</link>
		<comments>http://www.simonecarletti.it/blog/2007/08/larchitettura-di-wikipedia-nel-dettaglio/#comments</comments>
		<pubDate>Fri, 31 Aug 2007 14:02:15 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[wikimedia]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/2007/08/larchitettura-di-wikipedia-nel-dettaglio/</guid>
		<description><![CDATA[Uno sguardo da vicino all'architettura server di Wikipedia e Wikimedia.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-2896" title="Wikipedia Logo" src="http://www.simonecarletti.it/blog/wp-content/uploads/2009/09/wikipedia-logo.png" alt="Wikipedia Logo" width="135" height="155" /> Ho sempre letto con interesse (e spesso ammirazione) i whitepaper che descrivono le architetture delle applicazioni web, ovviamente ammesso e non concesso che queste applicazioni suscitino un certo interesse.<br />
Senz&#8217;altro a nessuno verrebbe in mente di chiedermi le caratteristiche del sito www.simonecarletti.com tuttavia progetti come FeedBurner, WikiPedia, Google e suoi prodotti hanno sempre il loro fascino.</p>
<p>Era dal tempo del post <a title="Quanti dati indicizza Google? - Simone Carletti's Blog" href="http://www.simonecarletti.it/blog/2006/09/quanti-dati-indicizza-google/">Quanti dati indicizza Google?</a>, quindi oltre un anno fa, che non mi capitava di sgranocchiare altrettanto impazientemente un whitepaper su un&#8217;architettura degna di interesse.<br />
Grazie ad un vecchio post di <a title="Wikipedia Architecture in Detail « Kevin Burton’s NEW FeedBlog" href="http://feedblog.org/2007/04/29/wikipedia-architecture-in-detail/">Kevin Burton</a> scopro che <a title="domas mituzas: vaporware, inc." href="http://dammit.lt/">Domas Mituzas</a>, che lavora per MySQL AB e Wikipedia, ha pubblicato un interessante workbook sull&#8217;<a title="domas mituzas: vaporware, inc.  » Blog Archive   » Wikipedia: site internals, etc (the workbook)" href="http://dammit.lt/2007/04/29/wikipedia-site-internals-etc-the-workbook/">architettura interna dei server della famosa enciclopedia</a>. Sempre dal post di Domas scopro che un altro interessante whitepaper pubblicato illustra l&#8217;<a href="http://www.nedworks.org/~mark/presentations/san/Wikimedia%20architecture.pdf">architettura di WikiMedia</a>.</p>
<p><span id="more-657"></span>Per i più curiosi che non disdegnano qualche pillola ma che non amano dedicarsi alla lettura di questi documenti, ecco alcune informazioni.</p>
<h2>Architettura LAMP</h2>
<p><a href="http://www.simonecarletti.com/blog/public/2007/08/larchitettura-di-wikipedia-nel-dettaglio/wikipedia-lamp.png"><img class="centered" src="http://www.simonecarletti.com/blog/public/2007/08/larchitettura-di-wikipedia-nel-dettaglio/wikipedia-lamp-thumb-400x303.png" alt="Wikipedia LAMP" width="400" height="303" /></a></p>
<p>Wikipedia si basa su una architettura <acronym title="Linux Apache MySQL PHP">LAMP</acronym>, ovvero</p>
<ul>
<li>Sistema operativo Linux, normalmente Fedora o Ubuntu</li>
<li>WebServer Apache</li>
<li>Database MySQL</li>
<li>Linguaggio di programmazione PHP, versione 5 (requisito minimo della piattaforma MediaWiki)</li>
</ul>
<p>La piattaforma è MediaWiki, progettata e sviluppata dalla WikiMedia Foundation che, per intenderci, è la stessa fondazione alla base di WikiPedia.<br />
Per accelerare i tempi di caricamento e gestire al meglio il carico, subentrano alcuni componenti di caching e distribuzione come</p>
<ul>
<li>Il proxy <a title="squid : Optimising Web Delivery" href="http://www.squid-cache.org/">SQUID</a></li>
<li>Il webserver <a title="lighttpd  fly light" href="http://www.lighttpd.net/">lighttpd</a> per la gestione dei file statici</li>
<li><a title="memcached: a distributed memory object caching system" href="http://www.danga.com/memcached/">Memcached</a> per il caching di alcune risorse ed elaborazioni</li>
</ul>
<p>Il documento prosegue poi presentando nel dettaglio l&#8217;architettura del sistema di caching e del database, fornendo utili informazioni su come ottimizzare ad esempio le query con appositi indici.<br />
Il sistema di ricerca si basa su un porting di Lucene (che nativamente è scritto in Java) mentre il bilanciamento del carico è affidato a LVS (Linux Virtual Service).</p>
<p><a href="http://www.simonecarletti.com/blog/public/2007/08/larchitettura-di-wikipedia-nel-dettaglio/wikipedia-environment.png"><img class="centered" src="http://www.simonecarletti.com/blog/public/2007/08/larchitettura-di-wikipedia-nel-dettaglio/wikipedia-environment-thumb-400x242.png" alt="Wikipedia Environment" width="400" height="242" /></a></p>
<p>Il whitepaper conta 30 pagine di dettagli tecnici ed utili informazioni, soprattutto per chi si prepara alla creazione di un progetto che dovrà presumibilmente sostenere carichi non indifferenti. Un&#8217;ottima lettura, non certo da ombrellone però.</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2005/12/wikipedia-rimuove-lattributo-nofollow/' rel='bookmark' title='Wikipedia rimuove l&#8217;attributo nofollow'>Wikipedia rimuove l&#8217;attributo nofollow</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2007/08/larchitettura-di-wikipedia-nel-dettaglio/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>MyIPNeighbors.com individua i siti hostati sullo stesso server</title>
		<link>http://www.simonecarletti.it/blog/2007/06/myipneighborscom-individua-i-siti-hostati-sullo-stesso-server/</link>
		<comments>http://www.simonecarletti.it/blog/2007/06/myipneighborscom-individua-i-siti-hostati-sullo-stesso-server/#comments</comments>
		<pubDate>Fri, 08 Jun 2007 09:46:36 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domini]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[strumenti]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/2007/06/myipneighborscom-individua-i-siti-hostati-sullo-stesso-server/</guid>
		<description><![CDATA[MyIPNeighbors.com è un veloce e semplice tool per individuare, via reverse IP, la lista dei domini configurati su un server indicato.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.simonecarletti.com/blog/public/2007/06/myipneighborscom-individua-i-siti-hostati-sullo-stesso-server/iplogoh.gif" alt="MyIPNeighbors.com Logo" width="266" height="90" />Ti sei mai chiesto quali sono i vicini di casa del tuo sito? Stavi cercando un tool per individuare tutti i siti sullo stesso server nel quale risiede il tuo?</p>
<p><a href="http://www.myipneighbors.com">MyIPNeighbors.com</a> potrebbe fare al caso tuo.<br />
Un veloce e semplice tool per individuare, via reverse IP, la lista dei domini configurati su un server indicato.</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2007/05/google-web-server-gws-esiste/' rel='bookmark' title='Google Web Server (GWS) esiste!'>Google Web Server (GWS) esiste!</a></li>
<li><a href='http://www.simonecarletti.it/blog/2008/10/leggendo-i-log-ho-scoperto-9-errori-nella-configurazione-server/' rel='bookmark' title='Leggendo i log ho scoperto&#8230; #9 &#8211; Errori nella configurazione server'>Leggendo i log ho scoperto&#8230; #9 &#8211; Errori nella configurazione server</a></li>
<li><a href='http://www.simonecarletti.it/blog/2006/11/113-server-per-gestire-google-calendar/' rel='bookmark' title='113 server per gestire Google Calendar'>113 server per gestire Google Calendar</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2007/06/myipneighborscom-individua-i-siti-hostati-sullo-stesso-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Web Server (GWS) esiste!</title>
		<link>http://www.simonecarletti.it/blog/2007/05/google-web-server-gws-esiste/</link>
		<comments>http://www.simonecarletti.it/blog/2007/05/google-web-server-gws-esiste/#comments</comments>
		<pubDate>Sun, 27 May 2007 13:30:47 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gws]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/2007/05/google-web-server-gws-esiste/</guid>
		<description><![CDATA[Tra i suoi header, alla voce Server Google restituisce GWS/2.1, acronimo di Google Web Server versione 2.1.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.simonecarletti.com/blog/public/2007/05/google-web-server-gws-esiste/google-enterprise.jpg" alt="Google Enterprise" width="250" height="194" />Dopo l&#8217;<a title="HTTP Headers Status Checker" href="http://www.simonecarletti.com/tools/http-checker">HTTP Headers Status Checker</a>, <a href="http://www.simonecarletti.it/blog/2007/05/strumenti-seo-http-headers-status-checker/">presentato un paio di giorni fa</a>, sto perfezionando un secondo tool che si baserà anch&#8217;esso sull&#8217;<strong>analisi degli header HTTP</strong>, ma sotto un&#8217;altra prospettiva.</p>
<p>Così, analizzando un po&#8217; di header ho scoperto una cosa singolare che non avevo ancora notato.<br />
Tra i suoi header, alla voce <code>Server</code> Google restituisce <acronym title="Google Web Server">GWS</acronym>/2.1, acronimo di <strong>Google Web Server</strong> versione 2.1.</p>
<p><span id="more-613"></span>Insomma, al di là delle tanto chiacchierate voci su Google FileSystem, Google Office e via dicendo, il Google Web Server esiste ed è quello che ogni giorno fornisce pubblicamente il risultato delle query agli utenti.<br />
Qualche timida informazione è disponibile su Wikipedia inglese, ma nulla più di una citazione.</p>
<p>Analizzando un po&#8217; di risorse in rete sembrerebbe che il Sistema Operativo che gestisce tali server sia una <strong>versione modificata di Linux Red Hat</strong>.<br />
Il <strong>web server base è Apache</strong>, anch&#8217;esso modificato e denominato Google Web Server.<br />
Il motivo principale di queste modifiche, facile identificabile, è quello di avere un&#8217;architettura scalare che permetta di distribuire al meglio i carichi, garantire un&#8217;elevata potenza di calcolo, bassi costi ma soprattutto una configurazione realmente adatta alle esigenze.</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2006/11/113-server-per-gestire-google-calendar/' rel='bookmark' title='113 server per gestire Google Calendar'>113 server per gestire Google Calendar</a></li>
<li><a href='http://www.simonecarletti.it/blog/2006/01/yahoo-blogs-esiste-o-non-esiste/' rel='bookmark' title='Yahoo-Blogs: esiste o non esiste?'>Yahoo-Blogs: esiste o non esiste?</a></li>
<li><a href='http://www.simonecarletti.it/blog/2007/06/myipneighborscom-individua-i-siti-hostati-sullo-stesso-server/' rel='bookmark' title='MyIPNeighbors.com individua i siti hostati sullo stesso server'>MyIPNeighbors.com individua i siti hostati sullo stesso server</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2007/05/google-web-server-gws-esiste/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>File di configurazione per IIS 7.0</title>
		<link>http://www.simonecarletti.it/blog/2006/09/file-di-configurazione-per-iis-70/</link>
		<comments>http://www.simonecarletti.it/blog/2006/09/file-di-configurazione-per-iis-70/#comments</comments>
		<pubDate>Wed, 06 Sep 2006 12:31:35 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/2006/09/file-di-configurazione-per-iis-70/</guid>
		<description><![CDATA[Quasi sicuramente IIS 7 disporrà di un file di configurazione espandibile fino a livello web, così come avviene per Apache.]]></description>
			<content:encoded><![CDATA[<blockquote><p>IIS 7.0 uses a new XML-based configuration store that is modeled after the ASP.NET configuration. IIS configuration is stored in the ApplicationHost.config file and can also be distributed among Web.config files for sites, applications, and directories. Settings configured at one level are inherited automatically by lower levels, unless they have been locked to prevent changes. By default, the server administrator is the only user who has permission to view and edit the ApplicationHost.config file.</p>
<p><cite><a title="IIS 7.0 Beta: IIS 7.0 Configuration Store" href="http://technet.microsoft.com/en-us/library/cc753369.aspx">IIS 7.0 Beta: IIS 7.0 Configuration Store</a></cite></p></blockquote>
<p>Quasi sicuramente IIS 7, disponibile a partire da Windows Vista, disporrà di un file di configurazione espandibile fino a livello web, così come avviene al momento per il file .htaccess su Apache.</p>
<p>Finalmente!</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2008/10/leggendo-i-log-ho-scoperto-9-errori-nella-configurazione-server/' rel='bookmark' title='Leggendo i log ho scoperto&#8230; #9 &#8211; Errori nella configurazione server'>Leggendo i log ho scoperto&#8230; #9 &#8211; Errori nella configurazione server</a></li>
<li><a href='http://www.simonecarletti.it/blog/2007/05/microsoft-outlook-ed-i-file-pst/' rel='bookmark' title='Microsoft Outlook ed i file .PST'>Microsoft Outlook ed i file .PST</a></li>
<li><a href='http://www.simonecarletti.it/blog/2007/05/i-file-pst-di-outlook-non-supportano-il-salvataggio-in-cartelle-di-rete/' rel='bookmark' title='I file PST di Outlook non supportano il salvataggio in cartelle di rete'>I file PST di Outlook non supportano il salvataggio in cartelle di rete</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2006/09/file-di-configurazione-per-iis-70/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Movable Type e Windows 2003</title>
		<link>http://www.simonecarletti.it/blog/2005/09/movable-type-e-windows-2003/</link>
		<comments>http://www.simonecarletti.it/blog/2005/09/movable-type-e-windows-2003/#comments</comments>
		<pubDate>Wed, 28 Sep 2005 15:04:39 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Server / Apache]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[movabletype]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[sixapart]]></category>
		<category><![CDATA[windows 2003]]></category>

		<guid isPermaLink="false">http://www.simonecarletti.it/blog/2005/09/movable-type-e-windows-2003/</guid>
		<description><![CDATA[Alcuni errori frequenti nell'installazione di Movable Type su Windows 2003 server, con relative soluzioni da applicare.]]></description>
			<content:encoded><![CDATA[<p>La mia prima esperienza d&#8217;installazione di <a href="http://www.sixapart.com/movabletype/">Movable Type</a> su un server Microsoft Windows è stato un completo disastro.<br />
Dopo aver scaricato tutti i pacchetti PERL necessari, eseguito lo script <code>mt-check.cgi</code> tutto era pronto ma&#8230; miracolosamente nulla funzionava!</p>
<p>Fortunatamente, dopo diverse ore passate a litigare con Windows 2003 server via <a href="http://www.realvnc.com/">VNC</a>, a postare su vari forum e a dialogare con l&#8217;assistenza di Movable Type (in seguito all&#8217;acquisto di una licenza completa), sono riuscito ad installare e configurare con successo la piattaforma.<br />
Ad essere sinceri&#8230; ne è valsa la pena!</p>
<p>Siccome non ero il primo e non sarò l&#8217;ultimo ad incontrare questi problemi, ecco alcuni suggerimenti.</p>
<p><span id="more-71"></span></p>
<h2>Quale server?</h2>
<p>Se dovete installare MT scegliete un server Unix, vi eviterete molti problemi.<br />
Se invece dovete installarlo su un server Windows e potete scegliere tra 2000 e 2003, precipitatevi sul primo. Microsoft Windows 2003 server è indubbiamente migliore rispetto alla versione 2000, ma ha qualche problema in più a digerire MT.</p>
<p>Se qualcuno si stesse chiedendo su quale SO l&#8217;ho installato&#8230; tutti e tre! ;)</p>
<h2>Errori comuni per Windows 2003 server</h2>
<blockquote><p>CGI Error &#8211; The specified CGI application misbehaved by not returning a complete set of HTTP headers.</p></blockquote>
<p>Questo erroraccio è riuscito a farmi impazzire per oltre 3 giorni.<br />
Il motivo alla base è la gestione dei percorsi delle librerie da parte di PERL montato su Win2k3. La situazione in sé anomala è che, per la legge di Murphy, il file mt-check.cgi vi dirà che il sistema è configurato correttamente ed è pronto per l&#8217;installazione.</p>
<p>Per risolvere questo errore avete due possibilità, oltre a distruggere il server o cambiare piattaforma.<br />
In ordine di convenienza.</p>
<ol>
<li> Utilizzate la libreria <code>perliis.dll</code> al posto del file <code>perl.exe</code> come interprete del linguaggio PERL.<br />
Per modificare le impostazioni aprite la <em>console di IIS</em>, <em>pulsante destro del mouse sul nome del web</em> da modificare e scegliete <em>Proprietà</em>.<br />
A questo punto nella tab <strong>Home Directory</strong> selezionate il pulsante <em>Configuration</em> (o configurazione) per accedere al mapping delle estensioni.<br />
Cercate l&#8217;estensione <code>.cgi</code> e al posto del percorso predefinito (in genere <code>C:\Perl\bin\perl.exe "%s" %s</code>) selezionate la libreria perlis.dll.</li>
<li> Cambiate il percorso della variabile di libreria da <code>lib</code> in <code>PERCORSO_ASSOLUTO\lib</code>.<br />
Personalmente ho provato anche questa soluzione, ma la sconsiglio.<br />
Alcuni riferimenti interessanti: <a href="http://www.movabletype.org/support/index.php?s=&amp;act=ST&amp;f=7&amp;t=53968&amp;st=0">http://www.movabletype.org/support/index.php?s=&amp;act=ST&amp;f=7&amp;t=53968&amp;st=0</a> e <a href="http://www.movabletype.org/support/index.php?act=ST&amp;f=7&amp;t=54171&amp;hl=&amp;s=">http://www.movabletype.org/support/index.php?act=ST&amp;f=7&amp;t=54171&amp;hl=&amp;s=</a></li>
<li><a title="CGI Error on IIS 6.0 (Windows 2003) " href="http://www.sixapart.com/movabletype/kb/installation/cgi_error_on_ii.html">CGI Error on IIS 6.0 (Windows 2003)</a>, articolo ufficiale tratto dalla Knowledge Base di SixApart.</li>
</ol>
<blockquote><p>&#8216;D:\Inetpub\[...]\mt.cgi&#8217; script produced no output</p></blockquote>
<p>Questo invece è un altro bell&#8217;errore comparso, all&#8217;improvviso, dopo qualche giorno di utilizzo di Movable Type, sempre su server Windows 2003.<br />
L&#8217;errore compariva solo ed esclusivamente quando tentavo di accedere alla pagina di modifica delle impostazioni di pubblicazione del blog, attraverso il menu <em>Settings</em> &gt; <em>Publishing</em>.</p>
<p>In questa occasione l&#8217;assistenza di MT è stata rapida ed eccellente e mi ha consigliato una procedura miracolosa per correggere il problema.</p>
<blockquote><p>1) Open the tmpl/cms/cfg_archives.tmpl file in a plain text editor (either the copy from your server or from the original download package). Save a backup copy of the file.</p>
<p>2) Look for the following section of code (at about line 246):</p>
<p><code>&lt;MT_TRANS phrase="This advanced feature allows you to map any archive template to multiple archive types. For example, you may want to create two different views of your monthly archives: one in which the entries for a particular month are presented as a list, and the other representing the entries in a calendar view of that month."&gt;</code></p>
<p>3) Remove the second sentence of text, so that the code ends up like this:</p>
<p><code>&lt;MT_TRANS phrase="This advanced feature allows you to map any archive template to multiple archive types."&gt;</code></p>
<p>4) Save the file and upload it back to the server in ASCII mode, replacing the copy on the server.</p></blockquote>
<p>Spero che queste piccole pillole possano rendere l&#8217;installazione di Movable Type su Microsoft Windows 2003 server più piacevole.</p>
<p>Related posts:<ol>
<li><a href='http://www.simonecarletti.it/blog/2006/08/movable-type-hack-da-keywords-a-tag/' rel='bookmark' title='Movable Type Hack: da Keywords a Tag'>Movable Type Hack: da Keywords a Tag</a></li>
<li><a href='http://www.simonecarletti.it/blog/2007/05/movable-type-plugin-editor-di-post-potenziato-con-mt-quicktags/' rel='bookmark' title='Movable Type Plugin: editor di post potenziato con MT Quicktags'>Movable Type Plugin: editor di post potenziato con MT Quicktags</a></li>
<li><a href='http://www.simonecarletti.it/blog/2006/11/in-previsione-un-file-manager-per-movable-type/' rel='bookmark' title='In previsione un File Manager per Movable Type'>In previsione un File Manager per Movable Type</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.simonecarletti.it/blog/2005/09/movable-type-e-windows-2003/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

