Donald J. Trump: Tekst STEM til 88022

Vi bruger selvhostede Wordpress, og tidligere brugte vi paginerede indlæg i vores artikel som.

www.example.com/some-article.html www.example.com/some-article.html/2 www.example.com/some-article.html/3 

Nu selv efter at vi har fjernet paginering, www.example.com/some-article.html/2 og www.example.com/some-article.html/3 URL'er åbnes stadig med det samme fulde indhold som den er på www.example.com/some-article.html.

Og jeg finder ud af, at Google stadig indekserer flere af disse paginerede URL'er, på trods af den kanoniske URL på de 2 paginerede URL'er, der med rette peger på www.example.com/some-article.html.

Jeg tror måske, det er fordi flere bloggere har linket til os ved hjælp af vores gamle paginerede webadresser /2 og /3 og Google følger stadig disse links.

Kan nogen give mig en løsning, enten via .htaccess kode eller funktioner, så hvis nogen åbner www.example.com/some-article.html/2 eller www.example.com/some-article.html/3 de bliver omdirigeret til www.example.com/some-article.html.

eller hvis det ikke er muligt, i det mindste hvis nogen åbner www.example.com/some-article.html/2 eller www.example.com/some-article.html/3 så giver det 404 Ikke fundet fejl.

Enhver hjælp ville blive meget værdsat.

Nuværende .htaccess kode er:

# BEGIN WordPress  # Rewrite HTTP to HTTPS RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

For at omdirigere disse URL'er kan du gøre noget som det følgende øverst på din .htaccess fil, Før WordPress front-controller:

RewriteRule ^(some-article\.html)/ /$1 [R=301,L] 

Dette kontrollerer for /some-article.html efterfulgt af et skråstreg (og eventuelt andet). Og omdirigerer til /some-article.html (værdien af $1 tilbagehenvisning). Det $1 backreference gemmer simpelthen indtastning / duplikering (og dermed mindsker chancen for at indføre fejl).

For at være mere specifik og kun matche /some-article.html/N (hvor N er et hvilket som helst ciffer), skift derefter RewriteRule mønster til ^(some-article\.html)/\d. Eller for kun at matche de specifikke webadresser, du nævnte (dvs. /2 eller /3) brug derefter ^(some-article\.html)/[23] i stedet.

NB: Første test med en 302 (midlertidig) og skift kun til en 301 (permanent) omdirigering, når du er sikker på, at den fungerer OK.

google indekserer stadig flere af disse paginerede urls, til trods for kanonisk url på disse 2 paginerede urls

Google indekserer stadig ikke-kanoniske webadresser, det er bare, at de normalt ikke skal vises i organiske søgeresultater. EN site: søgning er ikke en normal søgning (hvis det er det, du bruger til at kontrollere indekserede webadresser) og returnerer ofte ikke-kanoniske og endda omdirigerede webadresser.

OPDATERING # 1:

... vi er nødt til at løse dette problem med omkring 500 artikler

Så kan du sandsynligvis bare generalisere regex, hvis dine URL'er ender på .html og du vil omdirigere alle tidligere paginerede webadresser. For eksempel:

RewriteRule ^([\w-]+\.html)/\d /$1 [R=301,L] 

\w er en stenografisk karakterklasse, der matcher enhver ord Karakter. dvs. a-z, A-Z, 0-9 og _. Jeg har også inkluderet en bindestreg i den omfattende karakterklasse.


OPDATERING # 2:

Det ser ud til (efter at have diskuteret dette i chat), at de faktiske webadresser, du anmoder om, indeholder et yderligere stisegment (en WordPress-kategori) af formularen: //.html. Så du bliver nødt til at ændre ovenstående direktiv til noget som følger i stedet:

RewriteRule ^([\w-]+/[\w-]+\.html)/\d /$1 [R=301,L] 

# BEGIN WordPress  # Rewrite HTTP to HTTPS RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Bemærk, at du bør undgå at ændre direktiverne inde i # BEGIN WordPress sektion - dette vedligeholdes af WordPress (eller i det mindste forsøger det at), så eventuelle ændringer, du foretager, kan tilsidesættes senere.

Dine brugerdefinerede direktiver skal gå Før det # BEGIN WordPress afsnit.

For eksempel:

# Redirect HTTP to HTTPS RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Redirect old paginated URLs RewriteRule ^([\w-]+/[\w-]+\.html)/\d /$1 [R=301,L] # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Det gør du ikke brug for at gentage RewriteEngine On direktiv (selvom det ikke nødvendigvis er en "fejl" at gøre det). Det sidst RewriteEngine direktivet prioriteres og kontrollerer hele filen, så tidligere RewriteEngine direktiver ignoreres effektivt.

  • Faktisk er vi nødt til at løse dette problem med omkring 500 artikler, så det er ikke muligt at placere alle disse 500 webadresser i htaccess. Brug for koden en anden måde!
  • eller kan være, hvis vi på en eller anden måde automatisk kan tilføje noindex, nofollow til alle sider, der har / 2 eller / 3 i url.
  • Jeg har opdateret mit svar, så det inkluderer en mere generisk løsning, der passer til "enhver" artikel. Dette forudsætter, at alle webadresser er ved roden (ingen andre stisegmenter). Formentlig alle disse .html URL'er håndteres af WP?
  • Ok, jeg tilføjede koden i min htaccess, men det fungerede ikke .. når jeg åbner webadresser med / 2 eller / 3, åbner det samme som tidligere .. omdirigerer ikke. Her er min htaccess-kode .. bemærk, at den også indeholder http til https omdirigeringskode
  • 1 Tak, Mrwhite, den kode, du har angivet, fungerer fantastisk. Du er et ægte geni. Og tak for den ekstra hjælp til, hvor du skal placere http til https-omdirigeringskoden.

arbejdet for dig: Charles Robertson | Ønsker du at kontakte os?