Come redirect gli URL in base alla stringa di query?

Sono riuscito a migrare con successo un sito WordPress su Drupal. Sfortunatamente in WordPress, l’URL del contenuto era qualcosa come www.example.org/?p=123. Il mio dominio è sempre lo stesso, ma desidero eseguire un reindirizzamento tramite htaccess poiché Drupal non consentirà che gli URL siano www.example.org/?p=123. In altre parole, il contenuto non ha lo stesso URL di WordPress. Ad esempio, il nuovo URL Drupal sarebbe qualcosa come www.example.org/content/MyNewPage

Ho provato questo nel mio file .htaccess e non funziona

 Redirect 301 /\?p=375 http://www.example.org/content/MyNewPage 

Così ho provato il seguito, ma non funziona neanche.

 Redirect 301 /\?p\=375 http://www.example.org/content/MyNewPage 

Proprio come una prova, ho provato il sotto e ha funzionato.

 Redirect 301 http://www.example.org http://www.google.com 

Mi sono assicurato che la mia regola di Redirect fosse in cima alla lista nel mio .htaccess, quindi verrà valutata per prima. Come posso risolvere questo?

né Redirect né RedirectMatch consentono di specificare una stringa di query per l’origine di reindirizzamento. [Fonte]

Devi usare mod-rewrite per il reindirizzamento basato sulla stringa di query:

 RewriteCond %{QUERY_STRING} ^p=375$ RewriteRule (.*) http://www.example.org/content/MyNewPage? [R=301,L] 

Puoi prendere in considerazione l’uso di ModRewrite nel tuo htaccess

  RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{QUERY_STRING} ^p=345$ [NC] RewriteRule index.php content/MyNewPage [NC,L,R=301]  

E potresti anche voler passare l’ID della vecchia pagina al nuovo URL concatenato (o forse da QS?):

  RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC] RewriteRule index.php content/MyNewPage-%1 [NC,L,R=301]