it-swarm.dev

Vytváření 301 přesměrování pro poštu, stránku, kategorii a adresu URL obrázku?

Obávám se, že by to mohlo být příliš mnoho, než abych se na to zeptal, takže pokud ano, neváhejte a řekněte mi o jiném místě, kde se můžete učit.

Nápověda s přesměrováním

Čistím špatně vyvinuté stránky a migruji wordpress z podadresáře. Strávil jsem celé hodiny snahou zabalit hlavu kolem logistiky přesměrování a regexu. Myslím, že se mi to podařilo, ale opravdu bych ocenil potvrzení, že dělám toto právo, a jakoukoli radu ohledně osvědčených postupů. Pokud někdo ví o jakýchkoliv dobrých návodech s příklady, rád bych to také ocenil.

Pokud někdo ví o opravdu jednoduchých pluginech pro to, byl bych velmi vděčný. Díval jsem se na plugin Redirections, ale je to velmi matoucí (bolest hlavy!). V každém případě jsou mé nápady níže (zdroje následované => pak cíl) to, co jsem získal z instrukcí přesměrování a screenshotů a dalších tutoriálů, které jsem si prohlédl. Jsem si jistý, že budou použitelné bez ohledu na to, zda je vložím přímo do souboru .htaccess nebo použiju přesměrování nebo jiný plugin?

Takže, tady je to, co se snažím dosáhnout a jak si myslím, že je třeba to udělat:

  1. Přesunutí Wordpressu z podadresáře do kořenového adresáře:

    /wp /(.*) => /$1 
    
  2. Pro všechny stránky, které jsou v podadresářích v kořenovém adresáři, chci odstranit a/nebo zkombinovat spoustu stránek do jedné stránky nejvyšší úrovně:

    /products-directory /(.*) =>/products-top-level-page 
     
    /about-directory /(.*) =>/about-top- strana 
     
    /services-directory /(.*) =>/services-top-page-page 
    
  3. Pro spoustu stránek na nejvyšší úrovni, které odpovídají konkrétnímu vzoru, chci je nasměrovat do konkrétních kategorií, např. všechny názvy souborů začínají stejnými dvěma slovy, jako je tento: stejný-Word-variation-variation.html a chci, aby si zachovali své stávající názvy souborů - pokud nastavím své permalinks na `.html`, bude to fungovat , Věřím:

    /same-Word (. *) => /newcategory/$1 
    

    Jak bych vytvořil pravidlo, pokud nemám permalinky končící na `.html`? (Myslím, že jsem viděl! Není "charakter", ale není si jistý, jak ho použít - je to):

    /same-Word (. *) => /newcategory/$1!\t
  4. A pak, jakmile budu identifikovat konkrétní stránky a přesměrovat je, jak je uvedeno výše, budu mazat všechny ostatní (odpadky) a chci posílat uživatele na domovskou stránku (nebo možná náhodný příspěvek?).

    2 otázky zde:

    1. Jak vytvořím pravidlo, které říká „pro všechno kromě souborů, které již byly přesměrovány, proveďte to“

    2. Jak mohu zastavit používání tohoto pravidla na nové stránky a příspěvky, které nyní vytvářím?

    Jedna myšlenka je, že smazáním, bych se dostat 404 stránka nenalezena, takže bych měl vytvořit pravidlo pro samotnou stránku 404? To je to, co chci dělat?

    Jak jsem řekl, stránky byly špatně vyvinuty (s tím, že klient pokynul lidem, aby „zvrhli stránku“ bez ohledu na správnou architekturu, SEO atd.) - nemá prakticky žádné žebříčky ani externí/zpětné odkazy se obávat, ale chci pochopit nejlepší přístup ze SEO a správné perspektivy rozvoje.

  5. Také bych měl přesunout existující obrázky atd. Do adresáře wp-content nebo je nechat v existujícím podadresáři? Můj sklon je opravdu jít na 'clean-sweep' - zbavit se všeho, co se zdá být nečestné, ale nejsem si jistý, jestli by to bylo víc práce, než stojí za to…

Předem děkujeme za veškeré pokyny.

5
CJN

Hi @CJN:,

Vaše první otázka, přesunutí adresáře WordPress je zpracován odlišně od zbytku.

Přesunutí WordPress z podadresáře do kořenového adresáře:

Jděte do /wp-config.php a přidejte následující, abyste mohli definovat (pomocí domény vašeho klienta místo example.com samozřejmě):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 Přesměrování pomocí template_loader a wp_safe_redirect()

Většinu ostatních otázek můžete vyřešit změnou .htaccess jako @ Kau-Boy ukazuje, jak nebo můžete to udělat pouze v PHP. WordPress má háček template_redirect, který můžete použít spolu s funkcí wp_safe_redirect() k přesměrování s kódem stavu 301 HTTP. Jak vidíte, zbytek je jen hrubý pro PHP kód a trochu kouzla regulárního výrazu, které je pokropené dovnitř. Tento kód můžete umístit prakticky kdekoli v souboru functions.php vašeho tématu:

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();
  }
}

Zvažte použitelnost a ne jen SEO?

Chtěl bych se zeptat, jestli opravdu chcete dělat # 2? IMO, která dělá web mnohem méně použitelným pro uživatele než ten, který je optimalizován pouze pro vnímané SEO (a jako zakladatel a jeden čas spoluorganizátor této skupiny nejsem SEO novinkou). raději vidíte, že jste právě odložili "-directory" z prvního segmentu cesty URL. JMTCW.

Generování 404 stránek?

Pokud potřebujete vydat 404, můžete to udělat s hlavičkou:

header("HTTP/1.0 404 Not Found");
exit;

Myslím si však, že to není to, co chcete dělat, správně? Myslím, že můžete dosáhnout jakékoli přesměrovací logiky, kterou potřebujete, úpravou funkce PHP výše a odpovědí na požadavek HTTP pomocí 301, že?

Import obrázků do knihovny médií a přesměrování 301

Mohli byste je přemístit do mediální knihovny a umožnit vám tak jejich správu. Zde je plugin, který by vám mohl pomoci (i když si nejsem jistý, zda pracuje s verzí 3.0; pokud ne, může to být dobrý základ pro práci s kódem):

Hardcoding Image URL 301 Přesměrování pomocí pole

Pak, protože by to bylo a jednorázová věc, můžete jednoduše hardcode své URL adresy do pole a použít je, aby odpovídaly ve vaší funkci přesměrování. Úprava výchozí hodnoty v příkazu switch z výše uvedeného kódu může vypadat takto:

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
    }
  }

Použití preg_match() až 301 Přesměrování obrázků podle vzoru URL

Samozřejmě, pokud vaše obrazové adresy URL následují vzor, ​​můžete zjednodušit mnoho nebo všechny pole obrázků pomocí preg_match() místo toho, jako je tomu tak:

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

Snad to pomůže?

8
MikeSchinkel

K dispozici je plugin pro změnu z jednoho permalinkového strutu na druhý, ale jsem si jistý, že to nebude pro vaše potřeby dostačující. Budete muset použít některá pravidla pro přepsání .htaccess. Snažím se vám dát několik příkladů pro vaši potřebu (není si jistý, zda jsou všechny správné). Zahrnout všechny tyto řádky do souboru s názvem ".htaccess" v kořenovém adresáři serveru. To je nad pravidly wordpressu:

# 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]

Příznak [R = 301] řekne klientskému prohlížeči nebo vyhledávači, že se jedná o trvalé přesměrování.

Pravděpodobně budete chtít aktualizovat všechny permalinks ve vaší databázi wordpress. Napsal jsem článek o aktualizaci řetězce v databázi . Bohužel jsem tento příspěvek ještě nepřeložil. Dotazy by však měly být jasné, jinak stačí použít dokumenty MySQL.

1
2ndkauboy

Používám toto: Simple 301 Redirects plugin - používá se pro několik stránek před, a já jsem brzy přesunout své webové stránky designu se všemi jeho soubory a složky uvnitř mých souborů WP.

0
Steve Shearer