Domanda

sto trasferendo un grande sito web statico di 500 + pagine per un'installazione di Joomla, ma quello che sto voglia di fare, piuttosto che il codice di un file .htaccess 500+ linea, è quello di utilizzare PHP costruito nel 301 intestazione redirect per reindirizzare le richieste in modo dinamico che vengono in al nuovo URL.

Così, per esempio, dopo aver spostare il sito, il seguente URL sarebbe 404 senza un redirect -

http://www.foo.com/old_page.html

vorrei che per reindirizzare a

http://www.foo.com/old-page.php

Quindi, vorrei creare un database MySQL di vecchi URL e il loro corrispondente nuovo URL e poi, se il server sta per restituire un 404, perché prima di controllare il DB per il vecchio URL esistente, e se abbinato, di emettere un 301 redirect al nuovo URL. A destra, sto facendo senso qui?

Come potrei farlo? Posso "parlare" la logica, ma non sono davvero sicuro da dove cominciare o come realizzarlo, perché, pur comprendendo PHP, io non capisco come questo possa lavorare con Apache (o anche se sarebbe per esempio ...) ?

E se siete a conoscenza di tutti gli script là fuori che stanno già facendo questo, tanto meglio.

È stato utile?

Soluzione

Nella configurazione di Apache, impostare un ErrorDocument di qualsiasi sceneggiatura /404handler.php gradite. Nel suo contesto familiare, $ _ SERVER [ 'REQUEST_URI'] sarà l'URI della pagina originale richiesto. Fate la vostra ricerca nel database, e se si trova una pagina che si desidera reindirizzare fare, utilizzare intestazione. ( "Location:". $ Ovunque) per reindirizzare ad esso

Altri suggerimenti

Il modo più semplice che mi viene in mente sarebbe quella di utilizzare mod_rewrite (link è quello di una grande esercitazione introduzione) per reindirizzare tutte le richieste in entrata a un singolo script PHP (o usare una bandiera in modo che questo reindirizzamento avviene solo se la richiesta è per un file che non esiste), con l'indirizzo richiesto passato come parte della stringa di query. Da lì, hanno lo script PHP guardare in alto, dove tale richiesta dovrebbe andare, e reindirizzare ad esso.

Quindi, se qualcuno tenta di aprire http://www.foo.com/old_page.html, il mod_rewrite avrebbe mandato a qualcosa come http://www.foo. com / redirect.php? page = old_page.html . redirect.php poi fa una ricerca di database per vedere ciò che il nuovo indirizzo per "old_page.html" è, e reindirizza a lì.

Invece di creare una banca dati, perché non basta mettere un redirect in una pagina con il vecchio URL (es. Old_page.html)?

Dal momento che si sta ovviamente facendo questo caso per caso, con le voci del database, si può solo farlo come un caso per caso con le pagine.

Si potrebbe scrivere uno script perl rapido o quello che vuoi per generare queste pagine html per voi dato il nome di una vecchia pagina e l'URL della nuova pagina.

Si potrebbe anche usare un RewriteMap :

old_page new-page
# …

Ma è necessario definire quella mappa in voi httpd.conf (o configurazione host virutal):

RewriteMap oldtonew txt:/path/to/file/map.txt

È possibile quindi utilizzare tale mappa nel file .htaccess:

RewriteCond ${oldtonew:$1} .+
RewriteRule ^(.*)\.html$ /%0.html [L,R=301]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top