Reindirizzamento URL fatto in casa in conflitto con reindirizzamenti 301


11

Ho un sito web che è stato originariamente costruito utilizzando ASP classico. Circa un anno fa è stato riscritto in PHP. Ciò ha comportato la modifica delle estensioni di file e alcune pagine sono state spostate in nuove posizioni all'interno del sito Web. Naturalmente abbiamo effettuato 301 reindirizzamenti dai vecchi URL ai nuovi URL in modo che i loro utenti e motori di ricerca potessero trovare le loro nuove posizioni. Funziona benissimo.

Abbiamo anche creato loro uno strumento che consente al proprietario del sito di creare i propri piccoli URL che reindirizzeranno a una pagina con le variabili di monitoraggio della campagna di Google Analytics incluse nell'URL in modo che possano monitorare la campagna e vedere come si comporta.

Il problema che ho è che le regole di tracciamento della campagna sono in conflitto con i reindirizzamenti 301 e impediscono che i reindirizzamenti funzionino affatto.

Ecco il codice di monitoraggio della campagna:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

Come puoi vedere, controlla se esiste un file e se non lo fa reindirizza a uno script di monitoraggio (tracking.php) che quindi prende il codice di monitoraggio e reindirizza all'URL corretto con il codice della campagna di Google Analytics nella query corda.

Quel codice fa fallire regole come questa:

redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php

Ha senso che questo non funzioni insieme come dicono le regole di tracciamento, "se un file non viene trovato reindirizzare a tracking.php". Ciò di cui ho bisogno è che i reindirizzamenti 301 vengano eseguiti per primi, e se nessuno di essi corrisponde, quindi reindirizza allo script di monitoraggio. Posizionare le regole di tracciamento sotto i reindirizzamenti 301 non modifica i risultati.

Questo può essere fatto tramite .htaccess? O dovrò modificare lo script di tracciamento in modo che se una campagna non viene trovata, controlla se l'ID campagna è in realtà una vecchia pagina che deve essere reindirizzata e quindi reindirizzare 301 da lì?

Risposte:


5

Prova a convertire i mod_aliasreindirizzamenti in mod_rewritedirettive.


Modifica: l' esempio che segue presuppone che tu abbia sostituito i vecchi file ASP con i file PHP nello stesso percorso.

RewriteEngine on

# *.asp -> *.php
RewriteRule (.*)\.asp$ /$1.php [R=301,L]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

... oppure puoi saltare la variabile delle espressioni regolari e impostare un reindirizzamento esplicito per ciascuno dei vecchi URI:

RewriteRule about\.asp$ /about.php [R=301,L]
RewriteRule capabilities\.asp$ /capabilities.php [R=301,L]
RewriteRule capacitors\.asp$ /capacitors.php [R=301,L]

Modifica n. 2: ecco un esempio che dovrebbe coprire la maggior parte delle situazioni che incontrerai:

RewriteEngine on

# Changes to path + Query String Append
RewriteRule ^/path/to/old\.asp$ /path/to/new/about.php [R=301,L,QSA]

# *.asp -> *.php + Query String Append
RewriteRule ^(.*)\.asp$ $1.php [R=301,L,QSA]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

Non sono sicuro di cosa intendi. Puoi fare un esempio basato su quello che ho mostrato nella mia domanda?
John Conde

Grazie per la modifica. Ha senso adesso. Immagino che il mio ultimo problema sarebbe cosa fare con i file i cui percorsi sono cambiati? È possibile? O sto chiedendo troppo?
John Conde

Puoi impostare reindirizzamenti espliciti per quei file (se la maggior parte dei percorsi è cambiata, puoi anche usare reindirizzamenti espliciti per tutti i file per assicurarti che la configurazione sia mantenibile).
danlefree

Sospetto di non avere il [R=301,L]dopo ogni reindirizzamento è ciò che sta causando il mio problema. Fammi provare e ti farò sapere cosa succede.
John Conde

Il *.asp -> *.phpcarattere jolly funziona alla grande. Le singole regole per le pagine che non sono una transizione diretta e hanno stringhe di query sono problematiche. Ma questo sembra il modo giusto di andare. Se non riesco a sistemare quella parte, inizierò una nuova domanda al riguardo.
John Conde

-1

Vorrei invertire il reindirizzamento e lasciarlo com'era in origine. Reindirizza il tuo NUOVO sito al tuo VECCHIO sito. Il tuo sito OLD probabilmente sta già beneficiando di back-linking, età del sito Web e SEO. Sarebbe un peccato perderlo solo per sostituirlo con un sito più recente con un ranking inferiore. Google punisce i reindirizzamenti. Il tuo NUOVO sito non avrà ancora SEO su di esso, quindi è meglio usare un reindirizzamento su quello :)


Non penso che regredire sia una buona soluzione. Il sito originale era mal fatto in quasi tutti i modi. Abbiamo reso il sito più veloce, più utilizzabile, accessibile, organizzato e gestibile. Non perderanno nulla a causa dei reindirizzamenti perché è un sito di nicchia e aveva pochi link per cominciare e la maggior parte è andata alla home page che non richiede un reindirizzamento. Quindi non vogliamo assolutamente tornare al vecchio sito perché non guadagniamo nulla e perdiamo molto.
John Conde

Cordiali saluti, Google non punisce per i reindirizzamenti. L'unico problema che i reindirizzamenti hanno è che se sono incatenati troppo profondamente smettono di seguirli e alcuni PR si perdono quando si fa un 301 ma la quantità è banale e ne vale la pena rispetto alle alternative di non farlo affatto.
John Conde
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.