Per chi realizza siti WordPress è oramai una prassi sfruttare la funzione permalink per poter indirizzare le pagine con il titolo dell'articolo, questa funzione garantisce ottimi risultati in termini di SEO. Può capitare però che modificando il permalink il sito non sia più navigabile , mostrando solo la home page ed un fastidiosissimo errore "404 Page Not Found" quando si clicca su qualsiasi link.
Nel nostro caso ci siamo imbattuti in questo problema passando dalla versione di php 7 alla 8 sulla nostra webapp su azure.
Per risolvere un problema bisogna sempre individuare la causa, in questo caso la funzione permalink sfrutta la modifica del file .htaccess un file che contiene delle direttive di configurazione che permettono al web server di capire come indirizzare le richieste http ricevute. Dunque il problema si presenta quando il nostro hosting usa un webserver diverso da Apache e non riconosce le direttive presenti nel file .htaccess. Nel nostro caso il webserver è Nginx.
Infatti su azure passando a php 8 l'immagine docker usa il web server Nginx quindi si manifesta il problema discusso nel nostro articolo.
try_files $uri $uri/ /index.php?$args;
Per chi come nel nostro caso usa il servizio Webapp di Microsoft Azure ha un secondo problema in quanto con l'accesso ssh non si ha la possibilità di modificare il file di configurazione di nginx. Infatti ogni volta che si riavvia la web app i file di configurazione vengono rimpiazzati da quelli previsti nell'immagine docker di conseguenza per fare delle modifiche bisogna trovare un workaround.
Ecco quindi i passaggi da compiere
1. Copiare il file di configurazione di Nginx nella propria cartella home di Azure;
2. Modificare il file di configurazione con le istruzioni per trattare i permalink;
3. Configurare la web app di azure in modo che all'avvio sovrascrivi il file di configurazione di nginx con la copia nella nostra home.
Vediamo di seguito ognuno dei seguenti passaggi.
Come prima cosa dobbiamo far sì di poter modificare il file di configurazione del web server nella nostra webapp azure. Accediamo in ssh utilizzando l'apposito tool di azure :
https://[APPNAME].scm.azurewebsites.net/webssh/host
Una volta entrati dobbiamo copiare il file di configurazione dell'istanza di Nginx nella nostra cartella home con il seguente comando
cp /etc/nginx/sites-enabled/default /home/default
A questo punto siamo a metà dell'opera dobbiamo editare il file di configurazione appena creato con il comando :
vi /home/default
Modifichiamo quindi la sezione location / aggiungendo l'istruzione
try_files $uri $uri/ /index.php?$args;
dopo il nostro intervento la sezione dovrebbe presentarsi così:
location / {
try_files $uri $uri/ /index.php?$args;
index index.php index.html index.htm hostingstart.html;
}
Salviamo con ESC : X
Per fare questo accediamo all'area di configurazione della webapp sul nostro account Azure e inseriamo tra i comandi di avvio il seguente :
cp /home/default /etc/nginx/sites-enabled/default; service nginx restart
Mostriamo un immagine che vi aiuterà in questa operazioneRiavviate la webapp ed il gioco è fatto!!!