Stai creando reindirizzamenti 301 per URL di post, pagine, categorie e immagini?
3 risposta
- voti
-
- 2010-08-30
Salve @CJN: ,
Latuaprima domanda,lo spostamento della directory di WordPress vienegestitoin modo diverso dal resto.
Spostamento di WordPress dalla sottodirectory alla radice:
Accedi a
/wp-config.php
e aggiungi quanto segue a define (usandoil dominio deltuo clienteinvece diexample.com
ovviamente):define('WP_SITEURL', 'http://example.com'); define('WP_HOME', WP_SITEURL);
Reindirizzamenti 301 utilizzando
template_loader
ewp_safe_redirect()
Puoi risolvere lamaggiorparte del resto delletue domandemodificando
.htaccess
come @ Kau-Boy mostra come oppure puoi semplicementefarloin PHP . WordPress ha un hooktemplate_redirect
chepuoi utilizzareper questoinsieme allafunzionewp_safe_redirect()
per reindirizzare con un codice di stato HTTP301
. Comepuoi vedereil resto è solobrutoperil codice PHPe unpo 'dimagia diespressioni regolari spruzzate dentro. Puoimettere questo codicepraticamente ovunquenelfilefunctions.php
deltuotema:add_action('template_redirect','my_template_redirect'); function my_template_redirect() { $redirect_to = false; list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']); $path_parts = explode('/',trim($url_path,'/')); switch ($path_parts[0]) { case 'products-directory': $redirect_to = '/products-top-level-page'; break; case 'about-directory': $redirect_to = '/about-top-level-page'; break; case 'services-directory': $redirect_to = '/services-top-level-page'; break; default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { // Do whatever else you need here } } if ($redirect_to) { wp_safe_redirect($redirect_to,301); exit(); } }
Considerare l'usabilitàe non solo la SEO?
Ti chiederei se vuoi davverofareiln. 2? IMO che rende un sitomoltomeno utilizzabilepergli utenti di uno ottimizzatoesclusivamenteper la SEOpercepita (e comefondatoree co-organizzatore di questogruppo non sono unneofita SEO.) Preferirei digran lunga vedertieliminare la
"-directory"
dalprimo segmento dell'URL sentiero. JMTCW comunque.Staigenerandopagine 404?
Se deviemettere un 404puoifarlo con l'intestazione:
header("HTTP/1.0 404 Not Found"); exit;
Tuttaviapenso chenon sia quello che vuoifare,giusto? Penso chetupossa ottenere qualsiasi logica di reindirizzamento di cui haibisognomodificando lafunzione PHP soprae rispondendo alla richiesta HTTP con un
301
,giusto?Importazione diimmagininella libreriamultimedialee reindirizzamento 301
Potresti spostarlinella libreriamultimedialee cosìfacendopotrestigestirliin futuro. Ecco unplugin chepotrebbe aiutare (anche senon sono sicuro chefunzioni con 3.0;in caso contrariopotrebbeessere unbuon codicebase con cui lavorare comunque):
URL di codifica hardware 301 reindirizza utilizzando un array
Quindi,poiché sarebbe una cosa unica ,potresti semplicemente codificaregli URL dell'immaginein un array e utilizzarliper abbinarlinellafunzione di reindirizzamento. Modificandoil valorepredefinitonell'istruzione switch dal codiceprecedente,potrebbe apparire così:
default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { $images = array( '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg', '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg', '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg', ); if (in_array($url_path,$images)) { $redirect_to = $images[$url_path]; } else { // Do whatever else you need here } }
Utilizzo di
preg_match()
per reindirizzare 301immaginiin base alpattern URLOvviamente segli URL delleimmagini seguono uno schema,potresti semplificaregranparte otutto l'array diimmagini utilizzandoinvece un
preg_match()
,in questomodo:if (preg_match('#^/images/(.*)$#',$url_path,$match)) { $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}"; }
Spero che questo aiuti?
Hi @CJN:,
Your first question, moving the WordPress directory is handled differently from the rest.
Moving WordPress from Subdirectory to Root:
Go into
/wp-config.php
and add the following to defines (using your client's domain instead ofexample.com
of course):define('WP_SITEURL', 'http://example.com'); define('WP_HOME', WP_SITEURL);
301 Redirects using
template_loader
andwp_safe_redirect()
You can solve most of the rest of your questions by modifying
.htaccess
as @Kau-Boy shows how, or you can just do it in PHP. WordPress has atemplate_redirect
hook you can use for this along with thewp_safe_redirect()
function to redirect with a301
HTTP status code. As you can see the rest is just brute for PHP code and a bit of regular expression magic sprinkled in. You can put this code practically anywhere in your theme'sfunctions.php
file:add_action('template_redirect','my_template_redirect'); function my_template_redirect() { $redirect_to = false; list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']); $path_parts = explode('/',trim($url_path,'/')); switch ($path_parts[0]) { case 'products-directory': $redirect_to = '/products-top-level-page'; break; case 'about-directory': $redirect_to = '/about-top-level-page'; break; case 'services-directory': $redirect_to = '/services-top-level-page'; break; default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { // Do whatever else you need here } } if ($redirect_to) { wp_safe_redirect($redirect_to,301); exit(); } }
Consider Usability and Not Just SEO?
I would ask if you really want to do #2? IMO that makes a site a lot less usable for users than one that is optimized solely for perceived SEO (and as founder and one time co-organizer of this group I'm not an SEO neophyte.) I'd much rather see you just drop the
"-directory"
from the first segment of the URL path. JMTCW anyway.Generating 404 Pages?
If you need to issue a 404 you can do it with header:
header("HTTP/1.0 404 Not Found"); exit;
However I think that's not what you want to do, correct? I think you can achieve whatever redirect logic you need by modifying the PHP function above and responding to the HTTP request with a
301
, right?Importing Images into Media Library and 301 Redirecting
You could move them into the media library and doing so would allow you to manage them moving forward. Here's a plugin that might help (although I'm not sure if it is working with 3.0; if not it might be a good code base to work with anyway):
Hardcoding Image URL 301 Redirects using an Array
Then since it would be a one-time thing you could simply hardcode your image URLs into an array and use them to match in your redirection function. Modifying the default in the switch statement from the code above it might look like this:
default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { $images = array( '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg', '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg', '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg', ); if (in_array($url_path,$images)) { $redirect_to = $images[$url_path]; } else { // Do whatever else you need here } }
Using
preg_match()
to 301 Redirect Images by URL PatternOf course if your image URLs follow a pattern you could streamline much or all of the images array using a
preg_match()
instead, like so:if (preg_match('#^/images/(.*)$#',$url_path,$match)) { $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}"; }
Hope this helps?
-
Ciao Mike, Come sempre,seifantastico:estremamente disponibilee utilmente completo! Ma - questo sembramolto spaventosoe sonopreoccupato dientrarenellamiatestaper quanto riguardai filephpe core ... Nellaprimaparte dellatua risposta dici chepossofarlo con .htaccess comemostra @ Kau-Boy,quindi latua risposta è un'alternativa a quella,giusto? Alpunto # 2,le directory sono solo "/products/"ecc.,Nessuna "-directory" - ci sono unenorme # di directoryinutili con unenorme # difileinutili all'interno,volevo unmodoindoloreper sbarazzarmene"tuttotranne" lapagina diprimo livello all'interno di unpiccolo # di directory.Hi Mike, As always, you're amazing - thoroughly helpful and helpfully thorough! But -- this looks very scary and I'm worried I'll get in over my head as far as messing with php and core files... In the first part of your answer you say I can do it with .htaccess as @Kau-Boy shows, so your answer is an alternative to that, correct? On point #2, the directories are just "/products/" etc., no "-directory" -- there are a huge # of useless directories with a huge # of useless files within, I wanted a painless way to get rid of "everything except" the top level page within a small # of directories.
-
E,peresempio: "Generazione di 404" - Voglioevitare digenerare 404,non è vero?Sto cercando di "catturare"tutto coni 301.L'ideaera chepotesseessere unmodo sempliceper reindirizzare "tuttotranne" lepochepagine cheidentificonellemie altre 301 regole - quindieliminatuttotranne quellepochepagine;invece di ottenere un 404,l'utente viene reindirizzato alla homepage/pagina casuale che hoimpostato?Ma è questoilmodo saggio di affrontarlo? A quantopare,molte delle directoryinutili hanno anche lapropria cartella diimmagini all'interno,quindipiù dolore con quello ... Ad ognimodo,apprezzo davverotuttoiltuo aiuto (quie su altriforumti vedo).And, re: "Generating 404" - I want to avoid generating 404s, don't I? I'm try to 'catch' everything with 301's. That idea was that it might be an easy way to redirect "everything except" the few pages I identify in my other 301 rules-- so delete everything except those few pages; instead of user getting a 404, they get re-directed to home /random page I set? But,is that wise way to deal with it? As it turns out, a lot of the useless directories have their own images folder within also, so more pain with that... Anyway, I truly appreciate all your help (here and on other forums I see you on).
-
@CJN: Sì,questa è un'alternativa all'uso di ".htaccess",quest'ultimo chenon auguronemmeno aimiei peggiorinemici.:) Scherzi aparte,PHP èmoltopiùfacile scrivere qualcosa di robusto che con `.htaccess`.Latua domandaincludeva '`-directory`,motivoper cui ho usatonellamia risposta.Hofattomolto di questoe questo èprobabilmente uno deimodipiùindoloriin cuipuoi andare.Trovai modellie codificaliin istruzioni `if`,istruzioni` switch`,espressioni regolarie corrispondenze di array.Bastaprendere l'esempio aparte,è davvero abbastanza semplice.Poni le domande successive di cui haibisogno.@CJN: Yes this is an alternate to using `.htaccess` the latter which I don't wish even on my worse enemies. :) Seriously, PHP is so much easier to write something robust than with `.htaccess`. Your question included '`-directory` which is why I used in my answer. I've done a lot of this and this is probably one of the most painless ways you can go. Find the patterns and code them into `if` statements, `switch` statements and regular expression and array matching. Just pick the example apart, it really is quite simple. Ask any follow up questions you need.
- 0
- 2010-08-31
- MikeSchinkel
-
@CJN: latua domanda è stataformulatain modotale che hopensato cheforse li volevima sì,evitai 404.Renditi conto chegli URL sono un albero di segmenti dipercorso separati dabarree scrivi solo la logicapergestirlo;basta divideree conquistare.E chiedi seinciampi.Anche sepuò sembrare difficile,in realtànon èparagonabile atante altre cose,è solo un'ispezionee unamappatura dellaforzabruta.@CJN: Your question was worded such that I thought maybe you wanted them but yes, avoid 404s. Realize that URLs are a tree of path segments separated by slashes and just write logics to handle that; just divide and conquer. And ask if you stumble. While it may look hard it really isn't compare to so many other things, it's just brute force inspection and mapping.
- 0
- 2010-08-31
- MikeSchinkel
-
- 2010-08-29
Esiste unplug-inperpassare da una struttura dipermalink a un'altra,ma sono abbastanza sicuro chenon sarà sufficienteper letueesigenze. Dovrai usare alcune regole di riscrittura .htaccess. Provo a darti alcuniesempiper letuenecessità (non sono sicuro che sianotutti corretti). Includitutte quelle righein unfile chiamato ".htaccess"nella root deltuo server. Fuori dalle regole di wordpress:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On # your rules start here. Keep the following lines that has been produced by wordpress RewriteBase / RewriteRule wp/(.*)$ /$1 [R=301] RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301] RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301] RewriteRule /services-directory/$ /services-top-level-page [R=301] RewriteRule /same-word(.*)$ /newcategory/$1 [R=301]
Ilflag [R=301]indicherà albrowser client o almotore di ricerca che sitratta di un reindirizzamentopermanente.
Probabilmente vorrai aggiornaretuttii permalink all'interno deltuo database wordpress. Ho scritto un articolo sull'aggiornamento della stringanel database . Purtropponon ho ancoratradottoilpost. Ma le domande dovrebberoessere chiare,altrimenti usa semplicementei documenti MySQL.
There is a plugin for changing from one permalink struture to another, but I am quite sure that this will not be enough for your needs. You will have to use some .htaccess rewrite rules. I try to give you some examples for your need (not sure if they are all correct). Include all those lines into a file called ".htaccess" in the root of your server. Out it above of the wordpress rules:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On # your rules start here. Keep the following lines that has been produced by wordpress RewriteBase / RewriteRule wp/(.*)$ /$1 [R=301] RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301] RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301] RewriteRule /services-directory/$ /services-top-level-page [R=301] RewriteRule /same-word(.*)$ /newcategory/$1 [R=301]
The flag [R=301] will tell the client browser or search engine, that it is a permanent redirect.
You will probably want to update all the permalinks within your wordpress database. I wrote an article about updating string in the database. Unfortunately I haven't translated the post, yet. But the queries should be clear, otherwise just use the MySQL docs.
-
ragazzo, Graziemille.Sembra cheio abbia avuto leideegiuste,ma è difficile dirloperché dici "(non sono sicuro che sianotutte corrette)".Nonpenso che dovròpreoccuparmi dientrarenel databasepergestirei permalink.Hoimpostato wordpressin modo appropriatoe ho unabuonapadronanza di questo. Grazie ancoraperessereintervenuto - orami sentopiùfiducioso.boy, Thanks very much. It looks like I might have had the right ideas - but hard to tell because you say "(not sure if they are all correct)". I don't think I'll need to worry about getting into the database to deal with permalinks. I have wordpress set up appropriately and have a good handle on that. Thanks again for chiming in - I feel more confident going forward now.
-
- 2010-08-31
Uso questo:plug-in reindirizzamenti 301 semplici : l'ho usatoper unpochepagineprimae presto sposteròilmio sito di web design contuttii suoifilee cartelle all'interno deimiei file WP.
I use this: Simple 301 Redirects plugin - used it for a few pages prior, and I am soon to move my web design site with all it's files and folders inside of my WP files.
Temo che questopossaessere chiederetroppo qui,quindi se è così,nonesitare aparlarmi di un altroposto doveimparare.
Aiuto coni reindirizzamenti
Sto ripulendo un sitomal sviluppatoe migrando wordpress da una sottodirectory. Hopassato ore a cercare di capire la logistica dei reindirizzamentie delleespressioni regolari. Penso diesserci riuscito,ma apprezzerei davvero la conferma che lo stofacendobene e qualsiasi consiglio sullemiglioripratiche. Se qualcuno conosce deibuonitutorial conesempipratici,lo apprezzerei anch'io.
Se qualcuno conosce davvero semplicipluginper questo,sareiestremamentegrato. Hoesaminatoilplug-in Reindirizzamenti,ma lotrovomolto confuso (mal ditesta!). In ogni caso,lemie idee di seguito (lefonti sono seguite da=> quinditarget) sono ciò che ho raccolto dalleistruzioni di reindirizzamentoe schermatee altritutorial che ho setacciato. Sono abbastanza sicuro che sarebbero applicabiliindipendentemente dalfatto che liinserissi direttamentenelfile .htaccess o utilizzassii reindirizzamenti o un altroplug-in?
Quindi,ecco cosa sto cercando di otteneree comepenso che debbaesserefatto:
Per spostare Wordpress dalla sottodirectory alla radice:
Pertutte lepagine attualmente all'interno di sottodirectorynella radice,desideroeliminaree/o combinare ungruppo dipaginein unapagina diprimo livello:
Per ungruppo dipagine diprimo livello che corrispondono a uno schema specifico,desideroindirizzarlein categorie specifiche,ades.i nomi deifileinizianotutti con le stesse dueparole come questa: stessaparola-variazione-variazione.htmle voglio chemantenganoi loronomi difileesistenti - seimpostoi mieipermalinkin modo chefiniscano con ".html",funzionerà,Credo:
Come creo la regola senon hopermalink cheterminano con ".html"? (Penso di aver visto! Èil carattere "non",manon sono sicuro di come usarlo qui - è così):
Epoi,una voltaidentificatee reindirizzate lepagine specifiche come sopra,cancelleròtuttoil resto (spazzatura)e voglioinviaregli utenti alla homepage (oforse unpost casuale?).
Quindi,qui due domande:
Come creo la regola che dice "pertuttotrannei filegià reindirizzati come sopra,fallo"
Comefaccio aimpedire che questa regola si applichi allenuovepaginee aipost che creo d'orain poi?
Un'idea è cheeliminando,otterrei unapagina 404nontrovata,quindi dovrei creare la regolaper lapagina 404 stessa? È questo quello che vogliofare?
Come ho detto,il sito è stato sviluppatomale (conil cliente cheistruisce lepersone a "lanciare unapagina" senza riguardoper l'architettura corretta,SEO,ecc.) -non hapraticamente alcun ranking o/back link di cuipreoccuparsi,ma voglio capire l'approcciomigliore da unpunto di vista SEOe di sviluppo adeguato.
Graziein anticipoper qualsiasi consiglio.