<?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>Server Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<atom:link href="https://www.cesarebordi.it/category/categorie/server/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cesarebordi.it/category/categorie/server/</link>
	<description>Innovare con soluzioni software efficaci e gioco di squadra</description>
	<lastBuildDate>Mon, 23 Oct 2023 08:27:54 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.2</generator>

<image>
	<url>https://www.cesarebordi.it/wp-content/uploads/2016/02/CB-logo-88x88.png</url>
	<title>Server Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<link>https://www.cesarebordi.it/category/categorie/server/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Guida ai comandi Linux più utilizzati da Terminale</title>
		<link>https://www.cesarebordi.it/linux-shell-comandi-piu-utilizzati/</link>
					<comments>https://www.cesarebordi.it/linux-shell-comandi-piu-utilizzati/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Fri, 05 Jun 2020 09:46:00 +0000</pubDate>
				<category><![CDATA[Server]]></category>
		<category><![CDATA[attività sistemistica]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mkdir]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[shutdown]]></category>
		<category><![CDATA[terminale]]></category>
		<category><![CDATA[touch]]></category>
		<category><![CDATA[web developer]]></category>
		<category><![CDATA[webserver]]></category>
		<category><![CDATA[wget]]></category>
		<category><![CDATA[zip]]></category>
		<guid isPermaLink="false">http://www.cesarebordi.it/?p=287</guid>

					<description><![CDATA[<p>Una utile guida ai comandi linux da terminale più utilizzati dai web developer che devono svolgere attività sistemistiche o di controllo su server linux utilizzando la console. Guida...</p>
<p>L'articolo <a href="https://www.cesarebordi.it/linux-shell-comandi-piu-utilizzati/">Guida ai comandi Linux più utilizzati da Terminale</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Una utile<strong> guida ai comandi linux da terminale </strong>più utilizzati dai <strong>web developer</strong> che devono svolgere <strong>attività sistemistiche</strong> o di controllo su <strong>server linux</strong> utilizzando la <strong>console</strong>.</p>



<span id="more-287"></span>



<h2 class="wp-block-heading">Guida comandi linux</h2>



<figure class="wp-block-table is-style-regular"><table><thead><tr><th class="has-text-align-left" data-align="left">COMANDO</th><th>UTILIZZO</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left" colspan="2"><strong><mark style="background-color:#afcb08" class="has-inline-color">INFO SUL SISTEMA</mark></strong></td></tr><tr><td class="has-text-align-left" data-align="left">uname -m</td><td>mostra l&#8217;architettura del sistema</td></tr><tr><td class="has-text-align-left" data-align="left">uname -r</td><td>mostra la versione del kernel</td></tr><tr><td class="has-text-align-left" data-align="left">cat /proc/cpuinfo</td><td>mostra info sulla CPU</td></tr><tr><td class="has-text-align-left" data-align="left">cat /proc/meminfo</td><td>mostra info sulla memoria ram</td></tr><tr><td class="has-text-align-left" data-align="left">cat /proc/cpuinfo</td><td>mostra info sulla CPU</td></tr><tr><td class="has-text-align-left" data-align="left" colspan="2"><strong><mark style="background-color:#afcb08" class="has-inline-color">ARRESTO / RIAVVIO</mark></strong></td></tr><tr><td class="has-text-align-left" data-align="left">shutdown <strong>-h</strong> now</td><td>arresto istantaneo del sistema</td></tr><tr><td class="has-text-align-left" data-align="left">shutdown <strong>-r</strong> now</td><td>riavvio istantaneo del sistema</td></tr><tr><td class="has-text-align-left" data-align="left" colspan="2"><strong><mark style="background-color:#afcb08" class="has-inline-color">OPERAZIONI DI BASE SU FILE / CARTELLE</mark></strong></td></tr><tr><td class="has-text-align-left" data-align="left">cd /percorso</td><td>si sposta nella cartella indicata</td></tr><tr><td class="has-text-align-left" data-align="left">cd ..</td><td>risalire di un livello</td></tr><tr><td class="has-text-align-left" data-align="left">cd ../..</td><td>risalire di due livelli</td></tr><tr><td class="has-text-align-left" data-align="left">cp file1 file2</td><td>copiare un file</td></tr><tr><td class="has-text-align-left" data-align="left">cp -a dir1 dir2</td><td>copiare una directory</td></tr><tr><td class="has-text-align-left" data-align="left">rsync -av /path/sorgente/ /path/destinazione/</td><td>copia una directory e tutto il suo contenuto mantenendo i permessi e la proprietà dei file</td></tr><tr><td class="has-text-align-left" data-align="left">ln -s file1 lnk1</td><td>creare un link simbolico al file(o directory) &#8216;file1&#8217; chiamato lnk1</td></tr><tr><td class="has-text-align-left" data-align="left">ln file1 lnk1</td><td>creare un link fisico al file(o directory) &#8216;file1&#8217; chiamato lnk1</td></tr><tr><td class="has-text-align-left" data-align="left">ls -lh</td><td>visualizzare contenuto della directory</td></tr><tr><td class="has-text-align-left" data-align="left">ls -Flh (reverse: -Flhr)</td><td>distingue file e directory</td></tr><tr><td class="has-text-align-left" data-align="left">ls -Slh (reverse: -Slhr)</td><td>ordina per dimensione</td></tr><tr><td class="has-text-align-left" data-align="left">ls -a</td><td>visualizza file nascosti</td></tr><tr><td class="has-text-align-left" data-align="left">tree /percorso</td><td>visualizza file e directory in una rappresentazione ad albero</td></tr><tr><td class="has-text-align-left" data-align="left">mkdir dir1</td><td>creare la directory &#8216;dir1&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">mkdir dir1 dir2</td><td>creare due directory contemporaneamente</td></tr><tr><td class="has-text-align-left" data-align="left">mkdir -p /dir1/dir2</td><td>creare un albero di directory</td></tr><tr><td class="has-text-align-left" data-align="left">mv dir1 new_dir</td><td>rinominare/muovere una directory o file</td></tr><tr><td class="has-text-align-left" data-align="left">pwd</td><td>visualizzare il path della directory di lavoro</td></tr><tr><td class="has-text-align-left" data-align="left">rm -f file1</td><td>eliminare il file &#8216;file1&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">rm -rf dir1</td><td>eliminare ricorsivamente la directory &#8216;dir1&#8217; e sul contenuto</td></tr><tr><td class="has-text-align-left" data-align="left">rm -rf dir1 dir2</td><td>eliminare ricorsivamente due directory ed il loro contenuto con un solo comando</td></tr><tr><td class="has-text-align-left" data-align="left">rmdir dir1</td><td>eliminare la directory &#8216;dir1&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">find /dir1 -type f -name &#8220;*.ext&#8221; -delete</td><td>elimina tutti i file con una certa estensione cercando all&#8217;interno di una cartella e relative sottocartele.</td></tr><tr><td class="has-text-align-left" data-align="left">touch -t 1612011030 file1</td><td>modificare il timestamp di un file o directory &#8211; (YYMMDDhhmm)</td></tr><tr><td class="has-text-align-left" data-align="left">touch file1</td><td>utile pre creare un file vuoto</td></tr><tr><td class="has-text-align-left" data-align="left">touch -c file1</td><td>-c evita di creare nuovi file.</td></tr><tr><td class="has-text-align-left" data-align="left">find /percorso/ -name &#8220;file.ext&#8221; -delete</td><td>Cerca ed elimina tutti i file &#8220;file.ext&#8221; dal percorso (anche nelle sottocartelle)</td></tr><tr><td class="has-text-align-left" data-align="left" colspan="2"><strong><mark style="background-color:#afcb08" class="has-inline-color">DIMENSIONI FILE / CARTELLE</mark></strong></td></tr><tr><td class="has-text-align-left" data-align="left">df -h</td><td>visualizzare l&#8217;elenco delle partizioni montate</td></tr><tr><td class="has-text-align-left" data-align="left">du -sh dir1</td><td>conoscere lo spazio su disco occupato dalla directory &#8216;dir1&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">du -skh /percorso/* &#8211;time | sort -h</td><td>visualizzare la dimensione dei file e delle directory ordinanti per dimensione</td></tr><tr><td class="has-text-align-left" data-align="left">ls -l | wc -l</td><td>conta gli elementi presenti nella cartella in cui ci si trova</td></tr><tr><td class="has-text-align-left" data-align="left" colspan="2"><strong><mark style="background-color:#afcb08" class="has-inline-color">RINOMINARE FILE</mark></strong></td></tr><tr><td class="has-text-align-left" data-align="left">rename -n -v &#8216;s/^/PREFISSO/&#8217; *</td><td>Aggiunge un prefisso davanti al nome di i file contenuti in una cartella (NOTA:le opzioni -n -v eseguono una simulazione, rimuoverle per rendere il comando effettivo)</td></tr><tr><td class="has-text-align-left" data-align="left">rename -n -v &#8216;s/^(.{2})//&#8217; *</td><td>Rimuove i primi due caratteri dal nome di tutti i file contenuti in una cartella (NOTA:le opzioni -n -v eseguono una simulazione, rimuoverle per rendere il comando effettivo)</td></tr><tr><td class="has-text-align-left" data-align="left" colspan="2"><strong><mark style="background-color:#afcb08" class="has-inline-color">COMPRIMERE FILE</mark></strong></td></tr><tr><td class="has-text-align-left" data-align="left">zip archivio.zip file1 file2 file3</td><td>comprime file specifici nell&#8217;archivio &#8216;archivio.zip&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">zip -r archivio.zip dir1</td><td>comprime la directory &#8216;dir1&#8217; nell&#8217;archivio &#8216;archivio.zip&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">zip -r9 archivio.zip dir1</td><td>comprime la directory &#8216;dir1&#8217; nell&#8217;archivio &#8216;archivio.zip&#8217; utilizzando la compressione massima.</td></tr><tr><td class="has-text-align-left" data-align="left">unzip archivio.zip</td><td>decomprime l&#8217;archivio &#8216;archivio.zip&#8217; nella posizione corrente</td></tr><tr><td class="has-text-align-left" data-align="left" colspan="2"><strong><mark style="background-color:#afcb08" class="has-inline-color">TRASFERIMENTO FILE / DOWNLOAD / WGET</mark></strong></td></tr><tr><td class="has-text-align-left" data-align="left">wget http://www.dominio.ext/file.ext</td><td>scarica &#8216;file.ext&#8217; nella posizione corrente</td></tr><tr><td class="has-text-align-left" data-align="left">wget http://www.dominio.ext/file.ext -O nuovoNome.ext</td><td>scarica &#8216;file.ext&#8217; rinominandolo in &#8216;nuovoNome.ext&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">wget http://www.dominio.ext/file.ext</td><td>scarica in background &#8216;file.ext&#8217; nella posizione corrente</td></tr><tr><td class="has-text-align-left" data-align="left">wget -i listaFile.txt</td><td>Scarica i file contenuti nel file &#8216;listaFile.txt&#8217;</td></tr><tr><td class="has-text-align-left" data-align="left">wget &#8211;limit-rate=500k http://www.dominio.ext/file.ext</td><td>Scarica &#8216;file.ext&#8217; limitando la velocità a 500 Kb</td></tr><tr><td class="has-text-align-left" data-align="left">wget -r &#8211;ftp-user=Username &#8211;ftp-password=Password ftp://ftp.dominio.ext/&#8230;</td><td>Scarica ricorsivamente tutto il contenuto a partire dalla posizione FTP indicata.</td></tr><tr><td class="has-text-align-left" data-align="left">scp -r -P 22 user@host:/percorso/sorgente/remota/ /percorso/destinazione/locale/</td><td><strong>Secure Copy</strong> (scp) copia ricorsivamente il contenuto da un server remoto nella cartella locale (o altro server emoto).</td></tr></tbody></table></figure>
<p>L'articolo <a href="https://www.cesarebordi.it/linux-shell-comandi-piu-utilizzati/">Guida ai comandi Linux più utilizzati da Terminale</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/linux-shell-comandi-piu-utilizzati/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Architettura REST per sviluppare Web Service</title>
		<link>https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/</link>
					<comments>https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Wed, 22 Apr 2020 17:55:01 +0000</pubDate>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Categorie]]></category>
		<category><![CDATA[Lezioni]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[TechNerd]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[architettura]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[lezioni]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restfull]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[webservice]]></category>
		<guid isPermaLink="false">https://www.cesarebordi.it/?p=833</guid>

					<description><![CDATA[<p>L'architettura REST è oggi una delle più utilizzate nell'ambito dei Web Service. Ci si trova spesso a dover implementare api RESTful ed è importante avere una precisa conoscenza di questo modello di progettazione.</p>
<p>L'articolo <a href="https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/">Architettura REST per sviluppare Web Service</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>L&#8217;<strong>architettura REST</strong> è oggi una delle più utilizzate nell&#8217;ambito dei <strong>Web Service</strong>. Ci si trova spesso a dover <strong>implementare api RESTful</strong> ed è importante avere una precisa conoscenza di questo modello di progettazione.</p>



<h2 class="wp-block-heading">Architettura REST: cos&#8217;è?</h2>



<blockquote class="wp-block-quote"><p>Additional constraints can then be applied to form a new architectural style that better reflects the desired properties of a modern Web architecture.</p></blockquote>



<p><strong>REST</strong> vede la luce dieci anni dopo la nascita del <strong>World Wide Web</strong>, piattaforma per la condivisione di documenti distribuiti su server connessi tra loro. L’acronimo REST (<strong><span style="text-decoration: underline;">RE</span>presentational <span style="text-decoration: underline;">S</span>tate <span style="text-decoration: underline;">T</span>ransfer</strong>) viene introdotto nel 2000 nella tesi &#8220;<em><a rel="noreferrer noopener" href="https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank">Architectural Styles and the Design of Network-based Software Architectures</a></em>&#8221; di <a href="https://it.wikipedia.org/wiki/Roy_Fielding">Roy Fielding</a> definendo così uno&nbsp;<strong>stile architetturale</strong> basato sul Web che fissa un <strong>insieme di principi</strong> per la progettazione di un <a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Sistema_distribuito" target="_blank">sistema hypermedia distribuito</a>.</p>



<p><strong>REST</strong> è quindi un modello di progettazione e non va confuso con un protocollo (non definisce messaggi) nè con una specifica (non definisce uno standard), ma opera ad un livello di astrazione superiore.<br />Non è quindi del tutto corretto confrontarlo con il <strong>protocollo <a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a></strong> anche se entrambi sono oggi ampiamente usati nello <strong>sviluppo dei  Web Service</strong>.</p>



<p>In estrema sintesi:</p>



<blockquote class="wp-block-quote"><p>REST detta le regole per creare una piattaforma per l’elaborazione distribuita dei dati sfruttando l&#8217;architettura Web già dotata di tutto ciò che occorre: da una parte un&#8217;infrastruttura basata su protocolli ben definiti (<a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Hypertext_Transfer_Protocol" target="_blank">HTTP</a> in primis) dall&#8217;altra le informazioni viste come risorse mappate univocamente (<a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank">URI</a>).</p></blockquote>



<h2 class="wp-block-heading">I principi dell&#8217;architettura REST</h2>



<h3 class="wp-block-heading">Iniziare con un approccio &#8220;Null Style&#8221;</h3>



<p>Il &#8220;<strong>Null Style</strong>&#8221; è il punto di partenza: un sistema in cui non ci sono confini distinti tra i componenti (risorse) che andranno connessi. I seguenti <strong>principi dell&#8217;architettura REST</strong> rappresentano i <strong>vincoli</strong> per standardizzare l&#8217;accesso alle risorse distribuite in questo scenario.</p>



<h3 class="wp-block-heading">Client-Server </h3>



<p>L&#8217;<strong>architettura REST</strong> applica il paradigma <strong>SoC</strong> (<strong><span style="text-decoration: underline;">S</span>eparation <span style="text-decoration: underline;">o</span>f <span style="text-decoration: underline;">C</span>oncerns</strong>),  <em>&#8220;separazione dei compiti</em>“, al sistema di funzionamento Client-Server (<strong>Richiesta-Risposta</strong>). Il <strong>vincolo Client-Server</strong> favorisce un&#8217;architettura distribuita in cui lo sviluppo applicativo lato client è indipendente da quello lato server. Questo spiega anche perché REST non si preoccupa dei linguaggi e dei metodi di sviluppo.</p>



<h3 class="wp-block-heading">Stateless</h3>



<p>La comunicazione tra <strong>utente del servizio</strong> (<strong>client</strong>) ed il <strong>servizio</strong> (<strong>server</strong>) deve essere <strong>priva di stato</strong>: ogni richiesta del client deve contenere tutte le informazioni necessarie al server per comprendere la richiesta e non deve sfruttare informazioni di sessione memorizzate sul server. E&#8217; il client a gestire la sessione e, se necessario, dovrà ricevere opportune informazioni nella risposta del server.<br />Il <strong>vincolo stateless</strong> ha benefici sul monitoraggio delle richieste, sull&#8217;<strong>affidabilità</strong> e sulla <strong>scalabilità</strong>: non dovendo mantenere dati in sessione sarà più facile scalare orizzontalmente il servizio creando istanze parallele poste dietro ad un load balancer.</p>



<h3 class="wp-block-heading">Cache</h3>



<p>Nell&#8217;<strong>architettura REST</strong> il <strong>vincolo di Cache</strong> impone che le risposte siano etichettate come memorizzabili nella cache o meno. L&#8217;utilizzo della cache da parte di client, server o componenti middleware consente di ridurre le interazioni con la rete a tutto vantaggio delle performance.</p>



<h3 class="wp-block-heading">Uniform Interface</h3>



<p>L&#8217;<strong>architettura REST</strong> impone un <strong>vincolo di uniformità dell&#8217;interfaccia di accesso ai dati</strong> gestiti dal servizio, svincolandolo dalla specifica implementazione sottostante. Questo deve avvenire attraverso ulteriori sotto-vincoli.</p>



<h4 class="wp-block-heading"><span class="has-inline-color has-medium-gray-color">Identificazione delle risorse</span></h4>



<p>In REST ogni informazione è una<strong> risorsa</strong>, vista come qualsiasi cosa possa essere nominata: un documento, un&#8217;immagine, il meteo di oggi, &#8230;<br />Una risorsa può essere mutabile (l&#8217;ultima revisione di un documento) o immutabile nel tempo (la specifica revisione di un documento), l&#8217;unica cosa che deve essere statica è la semantica della sua mappatura, per questo motivo viene data una grande importanza all&#8217;<strong>identificazione univoca di una risorsa</strong> (<strong><a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank">URI</a></strong>) e alla necessità di mantenerla nel tempo.<br />Tale sotto-vincolo sottolinea lo scopo organizzativo proprio dei nomi di domino Internet.</p>



<h4 class="wp-block-heading"><span class="has-inline-color has-medium-gray-color">Rappresentazione delle risorse</span></h4>



<p>Una risorsa può essere rappresentata in molti modi diversi (HTML, XML, JSON, SVG, JPG, &#8230;) attraverso <strong>dati</strong>, <strong>metadati</strong> descrittivi ed eventuali &#8220;<strong>control data</strong>&#8220;. I dati di controllo possono definire lo scopo di un messaggio di richiesta o risposta, il suo comportamento o stato. Ad esempio possono specificare come gestire la cache di una riposta o la necessità di creare una risorsa sulla base dei dati e delle caratteristiche presenti nella richiesta.<br /></p>



<h4 class="wp-block-heading"><span class="has-inline-color has-medium-gray-color">Collegamenti tra risorse</span></h4>



<p>L&#8217;architettura <strong>REST</strong> è pensata per <strong>connettere risorse tramite collegamenti ipertestuali</strong>. Questo principio è anche noto come <strong>HATEOAS</strong> (Hypermedia As The Engine Of Application State). Un Client deve quindi apprendere dalla rappresentazione di un risorsa fornita dal server (risposta) l&#8217;eventuale relazione con ulteriori risorse.<br />Ad esempio, richiedendo una fattura, la risposta dovrebbe contenere anche il link alla relativa anagrafica cliente.</p>



<h3 class="wp-block-heading">Layered System</h3>



<p>Un&#8217;architettura REST prevede più livelli architettonici, indipendenti l&#8217;uno dall&#8217;altro, frapposti fra client e server.<br />Gli strati intermedi possono avere scopi specifici durate il transito dei dati come ad esempio la sicurezza, il caching o il balancing.<br />I livelli potranno essere modificati in base all&#8217;evolversi dello scenario.</p>



<h3 class="wp-block-heading">Code-On-Demand</h3>



<p>L&#8217;ultimo <strong>vincolo di code-on-demand</strong> è facoltativo e consente ad un&#8217;implementazione REST di estendere le funzionalità del client scaricando ed eseguendo il codice sotto forma di applet o script. Ciò appare oggi abbastanza scontato e potrebbe rendere questo vincolo facoltativo quasi paradossale, ma non lo era nel 2000 quando i contenuti Web erano per lo più pagine statiche renderizzate dal browser.</p>



<h2 class="wp-block-heading">Differenza tra architettura REST ed servizio RESTful</h2>



<p>Eroneamente usati come sinonimi, <strong>REST</strong> è il nome dello “stile architetturale” mentre <strong>RESTful</strong> viene utilizzato per qualificare un Web Service che rispetta i vincoli dell&#8217;architettura REST.</p>



<h2 class="wp-block-heading">Architettura REST: i contro</h2>



<ul><li>L&#8217;architettura REST si può applicare solo in ambito Web a differenza del protocollo SOAP.</li><li>A causa del vincolo stateless c&#8217;è la possibilità di un aumento dei dati di ambiente restituiti ripetutamente in una serire di richieste (overhead per interazione). Il vincolo di Cache cerca di compensare questo aspetto.</li><li>A causa del vincolo stateless, spostando il controllo sul client si riduce il controllo da parte del server sul comportamento coerente dell&#8217;applicazione.</li></ul>
<p>L'articolo <a href="https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/">Architettura REST per sviluppare Web Service</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/architettura-rest-per-sviluppare-web-service/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Screen: terminale permanente con un comando linux</title>
		<link>https://www.cesarebordi.it/screen-terminale-permanente-comando-linux/</link>
					<comments>https://www.cesarebordi.it/screen-terminale-permanente-comando-linux/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Thu, 10 Aug 2017 15:15:40 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Tips & tricks]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[terminale]]></category>
		<guid isPermaLink="false">http://www.cesarebordi.it/?p=445</guid>

					<description><![CDATA[<p>Vediamo un po&#8217; come in linux possiamo istanziare un terminale permanente mediante screen per mantenere in esecuzione script dalla lunga esecuzione. Problema: utilizzando il terminale di linux dovete...</p>
<p>L'articolo <a href="https://www.cesarebordi.it/screen-terminale-permanente-comando-linux/">Screen: terminale permanente con un comando linux</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Vediamo un po&#8217; come in linux possiamo istanziare un <strong>terminale permanente</strong> mediante <strong>screen</strong> per mantenere in esecuzione script dalla lunga esecuzione.</p>
<p><span style="text-decoration: underline;">Problema</span>: utilizzando il terminale di linux dovete lanciare un comando o uno script che richiederà molto tempo, ma non potete lasciar aperto il terminale o la sessione di ssh per tutte le ore o i giorni che impiegherà&#8230;</p>
<p>Soluzione: ci viene in aiuto il comando <em><strong>screen</strong></em>, vero e proprio &#8220;moltiplicatore di terminali&#8221; con il quale possiamo aprire una nuova sessione &#8220;virtuale&#8221; che  rimarrà aperta anche quando chiuderemo la sessione corrente.</p>
<p>Eseguendo infatti screen seguito dal comando che si vuole lanciare, nel nostro caso direttamente la bash,</p>
<pre class="brush: bash; title: ; notranslate">screen bash</pre>
<p>istanzieremo la bash nel nuovo terminale virtuale dal quale potremo lanciare il nostro comando dalla lunga esecuzione.</p>
<p>All&#8217;interno della sessione di screen potremo compiere varie operazioni:</p>
<ul>
<li><strong>premendo <span style="text-decoration: underline;">ctrl+a+c</span></strong> creeremo un nuovo terminale.</li>
<li><strong>premendo <span style="text-decoration: underline;">ctrl+a+n</span></strong> passeremo al terminale successivo.</li>
<li><strong>premendo <span style="text-decoration: underline;">ctrl+a+p</span></strong> passeremo al terminale precedente.</li>
<li><strong>premendo <span style="text-decoration: underline;">ctrl+a+d</span></strong> torniamo alla nostra sessione, mantenendo in esecuzione i comandi pendenti eseguiti in quella di screen.</li>
</ul>
<p>Ricollegandoci in un secondo momento potremo usare il comando seguente per riaprire una precedente sessione:</p>
<pre class="brush: bash; title: ; notranslate">screen -r 1234</pre>
<p>Dove ovviamente 1234 è il SID della sessione che desideriamo riaprire.</p>
<p>Digitando &#8220;screen -r&#8221;, nel caso ci siano più sessioni attive, viene mostrato l&#8217;elenco delle sessioni e dei relativi PID.</p>
<p>Per killare una sessione di screen:</p>
<pre class="brush: bash; title: ; notranslate">screen -X -S 1234 quit</pre>
<p>L'articolo <a href="https://www.cesarebordi.it/screen-terminale-permanente-comando-linux/">Screen: terminale permanente con un comando linux</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/screen-terminale-permanente-comando-linux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Modificare file hosts su Mac OSX</title>
		<link>https://www.cesarebordi.it/modificare-file-hosts-mac-osx/</link>
					<comments>https://www.cesarebordi.it/modificare-file-hosts-mac-osx/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Tue, 18 Jul 2017 13:52:27 +0000</pubDate>
				<category><![CDATA[Apple OSX / iOS]]></category>
		<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Categorie]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Tips & tricks]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[terminale]]></category>
		<guid isPermaLink="false">http://www.cesarebordi.it/?p=437</guid>

					<description><![CDATA[<p>Ecco una breve guida per modificare il file hosts su Mac OSX così da cambiare il puntamento dei domini su IP diversi da quelli realmente risolti dai DNS pubblici....</p>
<p>L'articolo <a href="https://www.cesarebordi.it/modificare-file-hosts-mac-osx/">Modificare file hosts su Mac OSX</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ecco una breve guida per modificare il file hosts su Mac OSX così da cambiare il puntamento dei domini su IP diversi da quelli realmente risolti dai DNS pubblici.</p>
<p>Aprire il terminale e digitare il seguente comando per aprire l&#8217;editor testuale Nano con i privilegi di amministratore:</p>
<pre class="brush: bash; title: ; notranslate">
sudo nano /etc/hosts
</pre>
<p>Aggiungere in una riga qualsiasi la riga che associa il nuovo IP al dominio desiderato. Es:</p>
<pre class="brush: bash; title: ; notranslate">
80.70.60.120 nomedominio.ext
</pre>
<p>Premere le combinazioni di tasti <b>CTRL+O</b> e poi INVIO per salvare e <strong>CTRL+X</strong> per chiudere Nano.</p>
<p>In alternativa si possono usare utility free per switchare rapidamente diversi file hosts come <a href="https://oldj.github.io/SwitchHosts/" target="_blank" rel="noopener noreferrer">SwitchHost!</a> o <a href="http://clockwise.ee/" target="_blank" rel="noopener noreferrer">Gas Mask</a>.</p>
<p>L'articolo <a href="https://www.cesarebordi.it/modificare-file-hosts-mac-osx/">Modificare file hosts su Mac OSX</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/modificare-file-hosts-mac-osx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MySql: cerca e sostituisci in una query per web developer</title>
		<link>https://www.cesarebordi.it/mysql-cerca-e-sostituisci-query-web-developer/</link>
					<comments>https://www.cesarebordi.it/mysql-cerca-e-sostituisci-query-web-developer/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Fri, 12 Aug 2016 17:21:18 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[web developer]]></category>
		<category><![CDATA[web master]]></category>
		<category><![CDATA[web project]]></category>
		<guid isPermaLink="false">http://www.cesarebordi.it/?p=381</guid>

					<description><![CDATA[<p>Scenario: nel routine di un web developer o di un web master capita spesso di dover fare un cerca e sostituisci con il database MySql. Credo che qualsiasi...</p>
<p>L'articolo <a href="https://www.cesarebordi.it/mysql-cerca-e-sostituisci-query-web-developer/">MySql: cerca e sostituisci in una query per web developer</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="text-decoration: underline;">Scenario</span>: nel routine di un <strong>web developer</strong> o di un <strong>web master </strong>capita spesso di dover fare un <strong>cerca e sostituisci</strong> con il <strong>database MySql</strong>. <span id="more-381"></span></p>


<p>Credo che qualsiasi <strong>programmatore</strong> si sia trovato nella condizione di dover <strong>cercare</strong> un determinato <strong>valore di un campo</strong> ricorrente in molteplici<strong> record</strong> per <strong>sostituirlo</strong> con uno diverso.</p>



<p>Diciamo ad esempio di voler <strong>sostituire in una tabella</strong> di dati anagrafici il termine &#8220;maschio&#8221; con &#8220;M&#8221; nel campo &#8220;genere&#8221;.</p>



<p>Problema: come fare quindi per eseguire un &#8220;<strong>cerca e sostituisci</strong>&#8221; in massa su tutti i <strong>record interessati</strong> della tabella MySql?</p>



<p>Soluzione: detto fatto, basta sfruttare l&#8217;apposita <strong><a href="http://dev.mysql.com/doc/refman/5.7/en/string-functions.html" target="_blank" rel="noreferrer noopener">string function REPLACE</a> di MySQL</strong> opportunatamente combinata con un <a href="http://dev.mysql.com/doc/refman/5.7/en/update.html" target="_blank" rel="noreferrer noopener"><strong>UPDATE</strong></a>:</p>



<p><strong>UPDATE</strong> `<em>nomeTabella`</em> <strong>SET</strong> `<em>nomeCampo`</em> = <strong>REPLACE</strong>(`<em>nomeCampo`</em>, &#8216;<em>cosaTrovare</em>&#8216;, &#8216;<em>cosaSostituire</em>&#8216;);</p>



<p>Se l&#8217;applichiamo al nostro esempio otterremo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
UPDATE `Anagrafica` SET `genere` = REPLACE(`genere`, 'maschio', 'M');
</pre></div><p>L'articolo <a href="https://www.cesarebordi.it/mysql-cerca-e-sostituisci-query-web-developer/">MySql: cerca e sostituisci in una query per web developer</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/mysql-cerca-e-sostituisci-query-web-developer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sicurezza: abilitare HTTPS in Apache2 su Ubuntu server</title>
		<link>https://www.cesarebordi.it/sicurezza-abilitare-https-in-apache2-su-ubuntu-server/</link>
					<comments>https://www.cesarebordi.it/sicurezza-abilitare-https-in-apache2-su-ubuntu-server/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Thu, 04 Aug 2016 14:24:27 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[sistemista]]></category>
		<category><![CDATA[terminale]]></category>
		<category><![CDATA[web developer]]></category>
		<category><![CDATA[webserver]]></category>
		<guid isPermaLink="false">http://www.cesarebordi.it/?p=370</guid>

					<description><![CDATA[<p>Scenario: vogliamo rendere uno scambio dati sicure, magari per rafforzare il sistema di autenticazione di un sito web o lo scambio dati fra una webApp, ma anche una...</p>
<p>L'articolo <a href="https://www.cesarebordi.it/sicurezza-abilitare-https-in-apache2-su-ubuntu-server/">Sicurezza: abilitare HTTPS in Apache2 su Ubuntu server</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="text-decoration: underline;">Scenario</span>: vogliamo rendere uno <strong>scambio dati sicure</strong>, magari per rafforzare il <strong>sistema di autenticazione</strong> di un <strong>sito web</strong> o lo <strong>scambio dati</strong> fra una<strong> webApp</strong>, ma anche una <strong>App nativa</strong> e un <strong>server</strong>.</p>
<p>Per fare questo dovremo utilizzare il <strong>protocollo HTTPS</strong> che abbina il comune HTTP ad un ulteriore <strong>protocollo di crittografia asimmetrica</strong>.<br />
HTTPS è infatti l&#8217;acronimo di <strong>HyperText Transfer Protocol over Secure Socket Layer</strong>.<br />
Questo sistema di sicurezza è stato pensato proprio per evitare che attraverso tecniche di <strong>man in the middle</strong> un malintenzionato possa fare<strong> sniffing dei dati</strong> scambiati bidirezionalmente fra server e client.</p>
<p><span style="text-decoration: underline;">Problema</span>: se &#8220;tirar su&#8221; un <strong>server LAMP</strong> è ormai alla portata di tutti i <strong>web developer </strong>grazie alle molte distribuzioni<em> out of the box</em>, abilitare l&#8217;https è già un&#8217;operazione più specificatamente <strong>sistemistica</strong>, ma ugualmente attuabile in pochi minuti.</p>
<p><span style="text-decoration: underline;">Spiegazione</span>: su <strong>Ubuntu Server</strong>, così come in molte altre distribuzioni, il <strong>modulo SSL</strong> è già presente nell&#8217;installazione base di <strong>Apache</strong>.<br />
Bisogna solo attivarlo con il seguente comando che abilita anche la <strong>porta 443</strong> di default per l&#8217;https.</p>
<pre class="brush: bash; title: ; notranslate">sudo a2enmod ssl</pre>
<p>Dovremo quindi predisporre una cartella in cui generare i nostri certificati di sicurezza. Consiglio di creare una sottocartella dentro a quella di apache.</p>
<p>Nel caso di Ubunti dovremo lanciare il comando</p>
<pre class="brush: bash; title: ; notranslate">sudo mkdir /etc/apache2/ssl</pre>
<p>In altre distribuzioni come centOS la sottocartella può essere creata con i comando</p>
<pre class="brush: bash; title: ; notranslate">sudo mkdir /etc/httpd/ssl</pre>
<p>Per ottenere <strong>chiave privata</strong> e <strong>certificato</strong> utilizzeremo <strong>openssl</strong> attraverso il seguente comando, riportando i percorsi corretti, scegliendo la <strong>crittografia RSA</strong> a 2048 bit e una validità di 365 giorni.</p>
<pre class="brush: bash; title: ; notranslate">sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt</pre>
<p>Nel caso openssl non fosse presente, si può installare mediante il seguente comando su Ubuntu (o analoghi su altre distro)</p>
<pre class="brush: bash; title: ; notranslate">apt-get install openssl</pre>
<p>La <strong>procedura di creazione dei certificati</strong> pone alcune domande alle quali si può rispondere abbastanza liberamente, es:</p>
<pre class="brush: bash; title: ; notranslate">
Country Name (2 letter code) &#x5B;AU]:IT
State or Province Name (full name) &#x5B;Some-State]:Modena
Locality Name (eg, city) &#x5B;]:Modena
Organization Name (eg, company) &#x5B;Internet Widgits Pty Ltd]:communicationBox
Organizational Unit Name (eg, section) &#x5B;]:Development
Common Name (e.g. server FQDN or YOUR name) &#x5B;]:NomeMioServer
Email Address &#x5B;]:maimaildiriferimento@dominio.it
</pre>
<p>A questo punto il grosso del lavoro è fatto, non resta che settare i <strong>virtual host </strong>per indicare di sfruttare la <strong>cominicazione sicura</strong> sulla porta 443 e chiave e certificato appena creati.</p>
<p>Nella cartella /etc/apache2/sites-available/ è solitamente già presente un file di esempio denominato default-ssl.conf che possiamo modificare o utilizzare come modello per creare il nostro file:</p>
<pre class="brush: bash; title: ; notranslate">
sudo nano /etc/apache2/sites-available/default-ssl.conf
</pre>
<pre class="brush: bash; title: ; notranslate">
&lt;VirtualHost *:80&gt;
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html
        &lt;Directory /&gt;
                Options FollowSymLinks
                AllowOverride All
        &lt;/Directory&gt;
        &lt;Directory /var/www/&gt;
                Options -Indexes +FollowSymLinks +MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        &lt;/Directory&gt;

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        &lt;Directory &quot;/usr/lib/cgi-bin&quot;&gt;
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

        Alias /doc/ &quot;/usr/share/doc/&quot;
        &lt;Directory &quot;/usr/share/doc/&quot;&gt;
                Options MultiViews FollowSymLinks
                AllowOverride None
                Order deny,allow
                Deny from all
                Allow from 127.0.0.0/255.0.0.0 ::1/128
        &lt;/Directory&gt;

&lt;/VirtualHost&gt;

</pre>
<p>Ora la configurazione è terminata, dobbiamo abilitare come di consueto il virtual host:</p>
<pre class="brush: bash; title: ; notranslate">
sudo a2ensite default-ssl.conf
</pre>
<p>Infine riavviamo il servizio per rendere effettive le modifiche:</p>
<pre class="brush: bash; title: ; notranslate">
sudo service apache2 restart
</pre>
<p>Ora, sincerandosi che il firewall della nostra connessione consenta il traffico sulla porta 443, puntiamo sull&#8217;ip del server, o sul dominio impostato nel virtualhost, ad esempio https://123.123.123.123.<br />
Comparirà un avviso che ci avverte che il certificato non è attendibile, questo è normale in quanto lo abbiamo autogenerato e non acquistato da un ente certificatore. Basterà procedere &#8220;accettando i rischi&#8221; per navigare in maniera sicura. Naturalmente, per siti o app pubbliche, è vivamente consigliato l&#8217;acquisto di un certificato verificato per non &#8220;spaventare&#8221; l&#8217;utente con questo avviso.</p>
<p>L'articolo <a href="https://www.cesarebordi.it/sicurezza-abilitare-https-in-apache2-su-ubuntu-server/">Sicurezza: abilitare HTTPS in Apache2 su Ubuntu server</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/sicurezza-abilitare-https-in-apache2-su-ubuntu-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress: escludere una cartella dal rewriting url di Apache</title>
		<link>https://www.cesarebordi.it/wordpress-escludere-una-cartella-dal-rewriting-url-di-apache/</link>
					<comments>https://www.cesarebordi.it/wordpress-escludere-una-cartella-dal-rewriting-url-di-apache/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Wed, 03 Aug 2016 10:16:39 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web developer]]></category>
		<category><![CDATA[webserver]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://www.cesarebordi.it/?p=358</guid>

					<description><![CDATA[<p>Scenario: molti cms, primo fra tutti WordPress, permettono di impostare la generazione automatica di friendly url per migliorare il seo di un sito web. L&#8217;abilitazione di tale funzione,...</p>
<p>L'articolo <a href="https://www.cesarebordi.it/wordpress-escludere-una-cartella-dal-rewriting-url-di-apache/">WordPress: escludere una cartella dal rewriting url di Apache</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="text-decoration: underline;">Scenario</span>: molti <strong>cms</strong>, primo fra tutti <strong>WordPress</strong>, permettono di impostare la generazione automatica di <strong>friendly url </strong>per migliorare il <strong>seo</strong> di un <strong>sito web.</strong> L&#8217;abilitazione di tale funzione, che sfrutta il <strong>modulo rewrite</strong> (<strong>mod_rewrite.c</strong>) di <strong>Apache</strong>, è una delle configurazioni di base che ogni <strong>web developer</strong> dovrebbe eseguire in fase di installazione della <strong>piattaforma </strong>attraverso l&#8217;apposito <strong>file .htaccess</strong>.</p>
<p>Il <strong>codice</strong> proposto dallo stesso <strong>WordPress</strong> che solitamente si utilizza per <strong>abilitare il rewriting</strong> e far così scomparire dalla url &#8220;index.php&#8221; è il seguente:</p>
<pre class="brush: bash; title: ; notranslate">
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - &#x5B;L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php &#x5B;L]
&lt;/IfModule&gt;
</pre>
<p>Questa regola eseguirà il rewrite di ogni percorso della url sott&#8217;intendendo la presenza di /index.php</p>
<p><span style="text-decoration: underline;">Problema</span>: può però essere necessario <strong>escludere una cartella</strong> (o più) da questa regola generale per caricare ad esempio file che devono essere accessibili attraverso un link diretto o script di varia utilità.</p>
<p><span style="text-decoration: underline;">Soluzione</span>: è possibile <strong>modificare la regola</strong> in modo da segnalare <strong>una directory</strong> (o più) che faccia <strong>eccezione</strong> rispetto alla regola generale attraverso la seguente istruzione:</p>
<pre class="brush: bash; title: ; notranslate">
RewriteCond %{REQUEST_URI} !^/(Cartella1|Cartella2|Cartella3).*$
</pre>
<p>Ecco come apparirà il blocco di codice completo:</p>
<pre class="brush: bash; title: ; notranslate">
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - &#x5B;L]
RewriteCond %{REQUEST_URI} !^/(Cartella1|Cartella2|Cartella3).*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php &#x5B;L]
&lt;/IfModule&gt;
</pre>
<p>L'articolo <a href="https://www.cesarebordi.it/wordpress-escludere-una-cartella-dal-rewriting-url-di-apache/">WordPress: escludere una cartella dal rewriting url di Apache</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/wordpress-escludere-una-cartella-dal-rewriting-url-di-apache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apache directory browsing: disabilitare la visualizzazione delle cartelle</title>
		<link>https://www.cesarebordi.it/apache-directory-browsing-disabilitare-la-visualizzazione-delle-cartelle/</link>
					<comments>https://www.cesarebordi.it/apache-directory-browsing-disabilitare-la-visualizzazione-delle-cartelle/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Mon, 22 Feb 2016 10:04:01 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[directory browsing]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[visualizzare cartelle]]></category>
		<category><![CDATA[webserver]]></category>
		<guid isPermaLink="false">http://www.cesarebordi.it/?p=155</guid>

					<description><![CDATA[<p>Scenario: abbiamo configurato il nostro webserver, ma ci accorgiamo che, in mancanza dei classici file di index, recandoci su un dominio configurato nei virtual host  il server mostra...</p>
<p>L'articolo <a href="https://www.cesarebordi.it/apache-directory-browsing-disabilitare-la-visualizzazione-delle-cartelle/">Apache directory browsing: disabilitare la visualizzazione delle cartelle</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="text-decoration: underline;">Scenario</span>: abbiamo configurato il nostro webserver, ma ci accorgiamo che, in mancanza dei classici file di index, recandoci su un dominio configurato nei virtual host  il server mostra ci consente la possibile di <strong>visualizzare le cartelle del nostro sito</strong> e navigare tra i file&#8230; A livello di sicurezza e riservatezza dei dati non è sicuramente il massimo!</p>
<p><span style="text-decoration: underline;">Problema</span>: come disabilitare il <strong>directory browsing</strong> di <strong>Apache2</strong>?</p>
<p><span style="text-decoration: underline;">Soluzione</span>: per prima cosa bisogna aprire il file della configurazione di default di apache2, nel mio caso denominato &#8220;000-default.conf&#8221; e rimuovere dalle options il modulo &#8220;Indexes&#8221; appunto.</p>
<p>Quindi troveremo una riga simile a questa:</p>
<pre class="brush: bash; title: ; notranslate">Options Includes Indexes FollowSymLinks MultiViews</pre>
<p>che diventerà:</p>
<pre class="brush: bash; title: ; notranslate">Options Includes FollowSymLinks MultiViews</pre>
<p>poi dovremo riavviare il servizio:</p>
<pre class="brush: bash; title: ; notranslate">sudo service apache2 reload</pre>
<p>Non sempre questo unico accorgimento risolve il problema, quindi consiglio di lanciare i seguenti comandi per <strong>disabilitare il modulo autoindex</strong> di Apache:</p>
<pre class="brush: bash; title: ; notranslate">
sudo a2dismod autoindex
sudo service apache2 restart
</pre>
<p>L'articolo <a href="https://www.cesarebordi.it/apache-directory-browsing-disabilitare-la-visualizzazione-delle-cartelle/">Apache directory browsing: disabilitare la visualizzazione delle cartelle</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/apache-directory-browsing-disabilitare-la-visualizzazione-delle-cartelle/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
