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.