Domanda

Sto cercando di reindirizzare le pagine di diversi vecchi domini su un nuovo dominio da una pagina all'altra, ovvero:

pagina 1: http://www.example.org/default.asp? id = 1 reindirizza a http://www.example2.org/newpage.html pagina 2: http://www.example2.org/default.asp?id=2 reindirizza a http://www.example.org/contact.html

... e così via. Ogni vecchia pagina verrà reindirizzata a una nuova pagina specifica.

Ho provato a scrivere qualcosa in .htaccess seguendo le linee di

Redirect 301 http://www.example.org/default.asp?id=1 h-tp://www.example.org/newpage.html
Redirect 301 http://www.example2.org/default.asp?id=2 h-tp://www.example.org/contact.html

Ma finora niente fortuna. mod_alias è abilitato ...

Ho anche provato a usare RewriteCond e RewriteRule in questo modo:

RewriteCond %{HTTP_HOST} example.org
RewriteRule default.asp?id=1 http://www.example.org/newpage.html [NC,L,R=301]
...

In altre parole: voglio fare un reindirizzamento pagina per pagina da ID-based a alias-based insieme a una fusione di tre siti / domini in un sito.

Spero che ci sia una soluzione utile. Grazie in anticipo!

È stato utile?

Soluzione

Il Redirect la direttiva funziona solo con il percorso URL ma non l'host o la query dell'URL.

Ma è possibile con mod_rewrite :

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} =id=1
RewriteRule ^default\.asp$ http://www.example.org/newpage.html [NC,L,R=301]

E come già detto nei commenti, puoi usare una riscrivere mappa per la mappatura da ID ad alias:

1 foo-page
2 bar-page
3 baz-page
…

La dichiarazione RewriteMap (qui un semplice file di testo semplice):

RewriteMap id-to-alias txt:/absolute/file/system/path/to/id-to-alias.txt

E infine l'applicazione:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3}&%1%4 ^([^&]+)&(.*)
RewriteRule ^default\.asp$ http://www.example.org/%1.html?%2 [NC,L,R=301]

Ciò dovrebbe anche conservare la query rimanente. Se non lo vuoi:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3} .+
RewriteRule ^default\.asp$ http://www.example.org/%0.html? [NC,L,R=301]

Altri suggerimenti

Una buona alternativa a mod_rewrite è usare qualunque linguaggio tu sia a tuo agio e mettere la logica nel tuo script. Punta tutti gli URL che desideri reindirizzare al tuo semplice front controller.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

E poi, in redirect.php:

<?php
if (

Una buona alternativa a mod_rewrite è usare qualunque linguaggio tu sia a tuo agio e mettere la logica nel tuo script. Punta tutti gli URL che desideri reindirizzare al tuo semplice front controller.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

E poi, in redirect.php:

<*>SERVER['SCRIPT_URL'] == '/default.asp'){ $map = array( 1 => '/newpage.html', 2 => '/contact.html' ); if (isset(

Una buona alternativa a mod_rewrite è usare qualunque linguaggio tu sia a tuo agio e mettere la logica nel tuo script. Punta tutti gli URL che desideri reindirizzare al tuo semplice front controller.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

E poi, in redirect.php:

<*>GET['id'])){ $id =

Una buona alternativa a mod_rewrite è usare qualunque linguaggio tu sia a tuo agio e mettere la logica nel tuo script. Punta tutti gli URL che desideri reindirizzare al tuo semplice front controller.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

E poi, in redirect.php:

<*>GET['id']; if (isset($map[$id])){ header('HTTP/1.1 301 Moved Permanently', true, 301); header('Location: http://'.

Una buona alternativa a mod_rewrite è usare qualunque linguaggio tu sia a tuo agio e mettere la logica nel tuo script. Punta tutti gli URL che desideri reindirizzare al tuo semplice front controller.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

E poi, in redirect.php:

<*>SERVER['HTTP_HOST'].$map[$id]); exit; } } } // ... handle another/path/to_some_file.ext here, or other domains, or whatever ... // If we get here, it's an invalid URL header('HTTP/1.1 404 Not Found', true, 404); echo '<h1>HTTP/1.1 404 Not Found</h1>'; echo '<p>The page you requested could not be found.</p>'; exit; ?>

Aggiungo solo qualche informazione in più

Le direttive di reindirizzamento del PO sono probabilmente nel formato sbagliato - dal relativo documento apache pagina :

  

La direttiva Redirect mappa un vecchio URL   in uno nuovo chiedendo al cliente di   recuperare la risorsa nel nuovo   posizione.

     

Il vecchio percorso URL fa distinzione tra maiuscole e minuscole   (% -decodificato) percorso che inizia con a   tagliare . Un percorso relativo non lo è   permesso. Il nuovo URL dovrebbe essere un   URL assoluto che inizia con uno schema   e nome host. Esempio:

Redirect /service http://foo2.bar.com/service

In modo da renderlo possibile:

Redirect 301 /default.asp?id=1 http://www.example.org/newpage.html

Spero che aiuti

In httpd.conf:

RedirectPermananent URL1 URL2

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top