Volevo solo tornare su questo punto per menzionare alcune delle insidie che ho trovato e magari lasciare qualche indizio per i futuri viaggiatori, perché ho trovato questo infernalmente difficile da debuggare.
Escaping nella stringa di normalizzazione dei permalink
Il formato della stringa di normalizzazione dei permalink ha due componenti
- la stringa dell’Espressione Regolare
- la stringa di Sostituzione
Appaiono, una subito dopo l’altra, nella stringa di normalizzazione dei permalink così
Permalink Normalization
Regular Expression Replacement
<-------------------------><-------------
/(this)reallyis(intuitive)/\\1reallyisn't\\2
È importante notare che gli slash vengono trattati in modo diverso nelle diverse parti della stessa stringa.
Uno slash (e altri caratteri regex) nella parte dell’Espressione Regolare della stringa deve essere escapato, tuttavia, gli slash non devono essere escapati nella parte di Sostituzione della stessa stringa e verranno invece trattati letteralmente.
Il Formato delle stringhe URL in ingresso
In secondo luogo, e questo mi ha richiesto un po’ di tempo per capirlo, si abbina l’URL come descrizione di un percorso relativo dalla radice, ma non si riceverà il / come prima parte della stringa.
Ad esempio, se l’URL che il tuo vecchio forum utilizzava fosse questo…
http://oldforum.com/chat/the-topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
…allora l’URL che la tua espressione regolare nella tua normalizzazione dei permalink cercherà di abbinare sarà questo…
chat/topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
cioè una descrizione del percorso dalla radice ma senza lo slash / iniziale. (Suppongo che questo possa variare a seconda della struttura degli URL a cui stai reindirizzando, ma non credo).
Esempi
Ecco alcuni esempi dal mio progetto di migrazione
CATEGORY_LINK_NORMALIZATION = '/(cat)\\/(.*?)([#\\?].*)?$/cat/\\2'
POST_LINK_NORMALIZATION = '/chat\\/(.*?)\\/(post)\\/(.+?)([#\\?].*)?$/post/\\3'
TOPIC_LINK_NORMALIZATION = '/(chat)\\/(.*?)([#\\?].*)?$/topic/\\2'
Il Processo
| Old URL |
Permalink Normalization |
URL Match Text |
| http://oldsite.com/cat/history |
/(cat)\\/(.*?)([#\\?].*)?$/cat/\\2 |
cat/history |
| http://oldsite.com/chat/topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1 |
/chat\\/(.*?)\\/(post)\\/(.+?)([#\\?].*)?$/post/\\3 |
post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1 |
| http://oldsite.com/chat/mindgames-in-football |
/(chat)\\/(.*?)([#\\?].*)?$/topic/\\2 |
topic/mindgames-in-football |
| L’Old URL è come suona: l’URL dell’elemento nel vecchio sistema. |
|
|
La permalink normalization (registrata nell’impostazione di sistema permalink_normalizations) catturerà l’URL in ingresso (senza lo slash / iniziale) e applicherà la corrispondenza regex. L’URL normalizzato risultante viene quindi utilizzato per abbinare il URL Match Text inserito nella schermata /admin/customize/permalinks. |
|
|