Hvordan sette en omdirigering til en annen URL i PHP før siden laster? Euroleague menn ucp php omdirigering

6,1K

La oss si at du vil vise siden https://example.com/final.php til brukere som går til siden https://example.com/initial.php. Dette kan gjøres med noen få PHP-metoder, JavaScript og HTML. I denne artikkelen vil vi dekke hver av metodene du kan bruke for å omdirigere PHP til en annen side.

Her er noen få variabler vi skal bruke:

Bruke PHP header()-funksjonen for å omdirigere en URL

Hvis du vil legge til en omdirigering fra initial.php til final.php , kan du plassere følgende kode på initial.php-nettsiden. Den sender en ny plasseringsoverskrift til nettleseren:

Her bruker vi PHP-funksjonen header() for å lage omdirigeringen. Du må plassere denne koden før HTML eller tekst. Ellers vil du få en feilmelding om at overskriften allerede er sendt. Du kan også bruke utgangsbuffring for å forhindre denne feilen med å sende overskrifter. Følgende eksempel viser denne PHP-omdirigeringsteknikken i aksjon:

For å utføre en omdirigering ved å bruke header()-funksjonen, må ob_start()-funksjonen være den første funksjonen i PHP-skriptet. Dette vil forhindre at overskriftsfeil oppstår.

Som et ekstra tiltak kan du legge til die() eller exit() umiddelbart etter header-omdirigeringen slik at resten av nettsidekoden ikke kjøres. I noen tilfeller kan det hende at søkeroboter eller nettlesere ikke tar hensyn til indikasjonen i posisjonsoverskriften. Hva er de potensielle truslene mot nettstedets sikkerhet:

For å være tydelig: die() eller exit() har ingenting med omdirigeringer å gjøre. De brukes til å forhindre at resten av koden på nettsiden kjøres.

Når du omdirigerer til en side i PHP, anbefales det å bruke absolutte URL-er når du spesifiserer posisjonshodeverdien. Men relative nettadresser vil også fungere. Du kan også bruke denne funksjonen til å omdirigere brukere til eksterne nettsteder eller nettsider.

Sender ut JavaScript-omdirigeringskode ved hjelp av PHP echo()-funksjonen

Dette er ikke en ren PHP-løsning. Det er imidlertid også effektivt. Du kan bruke PHP echo()-funksjonen til å sende ut JavaScript-koden som skal håndtere omdirigeringen.

Hvis du bruker denne løsningen, trenger du ikke bruke utdatabuffring. Dette forhindrer også at feil knyttet til sending av overskrifter oppstår.

Nedenfor er noen eksempler som bruker ulike metoder JavaScript for å omdirigere fra gjeldende side til en annen:

Den eneste ulempen med denne metoden for å omdirigere til et annet PHP-nettsted er at JavaScript kjører på klientsiden. Og de besøkende kan ha JavaScript deaktivert.

Bruke HTML-metakoder for omdirigering

Du kan også bruke grunnleggende HTML for å utføre omdirigeringen. Det kan virke uprofesjonelt, men det fungerer. Og du trenger ikke å bekymre deg for at JavaScript blir deaktivert i nettleseren din eller tidligere har sendt en overskriftsfeil:

Du kan også bruke den siste linjen fra forrige eksempel til å automatisk oppdatere siden hvert "n" sekund. For eksempel vil følgende kode automatisk oppdatere siden hvert 8. sekund.

Hei venner. I dag vil jeg gjerne diskutere et veldig utslitt, men alltid relevant emne - dette er 301 Redirect (Permanent Redirect 301) - i SEO-fellesskapet, og uten formaliteter er dette akkurat det som menes med ordet "omdirigering". Teknisk sett er dette serverens svar på en forespørsel til den; dette svaret har en kode på 301, noe som indikerer at adressen til forespørselen er permanent flyttet. Som et resultat av alle disse utspekulerte innspillene burde vi få en ny endelig adresse.

Jeg tror at du ikke trenger disse tekniske aspektene, og derfor vil jeg snakke om anvendte ting - når og i hvilke situasjoner er det bedre å bruke en omdirigering, hvordan og med hvilke kommandoer du kan konfigurere omdirigeringsregler, etc. Vi vil også vurdere verktøy og tjenester som du kan kontrollere riktigheten av omdirigeringer med.

Siden innlegget viste seg å være veldig langt, bestemte jeg meg for å lage en innholdsfortegnelse for enkelhets skyld:

Når BØR du gjøre en 301-viderekobling?

For det første brukes en omdirigering når en side (en gruppe sider eller en hel seksjon) har endret adresse - oftest skjer dette når strukturen til nettstedet endres, hoveddelen av url-en endres, eller prinsippet om å danne adresser endres (med andre ord, CNC). Dessverre er det ikke alle som tenker på dette når de endrer noe på nettstedet, og som et resultat er det mange duplikater, noe som fører til tap av stillinger eller til og med ileggelse av sanksjoner fra søkemotorer. I arbeidet mitt møter jeg veldig ofte slike situasjoner, og det koster mye nerver å rette opp alt og nøytralisere konsekvensene. På mine egne vegne kan jeg anbefale at før du jobber med å endre type CNC eller endre strukturen, lager du en plan over den nåværende strukturen til nettstedet, alle dets seksjoner og eksempler på sluttsider. Alt dette må sjekkes etter at arbeidet er fullført, slik at når vi går til den gamle adressen kommer vi til den nye, og serveren gir en omdirigering med kode 301 (og ikke 302).

Den neste vanlige bruken av 301-viderekoblinger er å endre nettstedets adresse eller lime speil sammen. Hvis du bestemmer deg for å endre nettstedsadressen i forbindelse med rebranding av selskapet eller registrerte et nytt, vakrere og kortere domene for å indikere det på trykte reklameprodukter, er det svært viktig at når du får tilgang til adressen på det gamle domenet, havner på samme side (og ikke på hjemmeside), men på et nytt domene. Når det gjelder salgsfremmende nettsteder, består de vanligvis av en eller to sider, lenker som fører til hovedsiden, eller når du går til kampanjesiden, blir du umiddelbart omdirigert til en spesiell side på hovedsiden. Noen ganger, når du oppretter en nettside, registreres flere domener samtidig, for eksempel på grunn av den tvetydige stavemåten av firmanavnet på latin. For å sikre at når brukeren intuitivt skriver inn en adresse, kommer brukeren til rett sted, og flere domener registreres, er det svært viktig at det skjer 301 omdirigeringer fra alle «hjelpe»-domener til én hovedadresse. Det samme nettstedet skal ikke under noen omstendigheter være tilgjengelig for alle adresser.

Og også om speil - det kan hende at nettstedet ditt vil være tilgjengelig på adressene http://www.site.ru, http://site.ru og https://site.ru (sistnevnte er sjelden, men det skjer) - dette er alle de klassiske feilene som ikke bør gjøres, og 301 omdirigeringer er involvert i å løse dem. Akkurat som i tilfellet med forskjellige nettstedsadresser, må du bestemme deg for hovedspeilet (med www eller uten www) og sette opp omdirigeringer til hovedspeilet. Selvfølgelig er ikke søkemotorer dumme og i slike situasjoner klarer de seg ofte på egenhånd, og du kan også hjelpe dem ved å gjøre riktige innstillinger i nettredaktørpaneler og i robots.txt (for Yandex, vertsdirektivet). Men SEO er en delikat sak, og jeg ville ikke stole på flaks, men brukt en velprøvd metode!

Noen ganger oppstår en veldig ubehagelig situasjon når en kopi av nettstedet blir tilgjengelig, ikke bare når du skriver inn domenenavnet i adressefeltet, men også IP-adressen til serveren. Denne situasjonen vil neppe skje på delt hosting, men hvis du har en dedikert server, kan det lett skje. Dette kan være årsaken til feil serverkonfigurasjon - deaktivering av tilgang når du får tilgang til en IP-adresse vil bidra til å løse problemet, men den beste løsningen her er en 301-omdirigering på webservernivå (Apache eller Nginx). For et par måneder siden hadde jeg akkurat en slik situasjon - jeg hadde en dedikert server som noen av sidene hang på, men for en av sidene bestemte jeg meg for å ta en annen separat server. Jeg overførte nettstedet, alt fungerte som smurt, og så en dag kom jeg over en klone av nettstedet mitt i Google-resultater - sjokk, panikk - det viste seg at dette var IP-adressen til den nye serveren min og, selvfølgelig, nettstedet mitt lever på den, og når den kontaktes, gir serveren et svar 200 OK, og Google har fullstendig indeksert det. Det var ikke noe slikt problem på den forrige serveren; en 301-omdirigering fra IP-en til domenet spesifisert som hoveddomenet for denne IP-en ble opprinnelig konfigurert. Nå har jeg lært av bitter erfaring og sjekker alltid slike ting - vær oppmerksom og du, ikke gjenta feilene. Problemet ble løst ved å legge til en omdirigering til hoveddomenet til nginx-nettserverkonfigurasjonene; Jeg vil vise et eksempel på koden i den praktiske delen av innlegget nedenfor.

Situasjonen er lik den forrige - når en kopi av nettstedet er lokalisert og tilgjengelig via et tjenestetestdomene, for eksempel som site.hosting.ru. Slike tilfeller forekommer også i min praksis, og i motsetning til forrige tilfelle er dette typisk for virtuell hosting. Hvorfor eksisterer dette? For eksempel, du har ennå ikke kjøpt et domene eller du overfører et nettsted fra en hosting til en annen, men NS-serverne for domenet er ikke endret eller har ennå ikke blitt oppdatert DNS-poster hos leverandøren. I slike situasjoner gjør de det testadresser, hvor du kan konfigurere og installere alt før du omdirigerer nettstedsadressen til den nye hostingen. Og noen hostere synder ved å ikke blokkere tilgang til slike tekniske adresser og ikke engang forby indeksering. Hvis du har denne ubehagelige situasjonen, bør du prøve å registrere en 301-viderekobling fra den tekniske adressen til hovedadressen i .htaccess-filen.

Og selvfølgelig liker 301-omdirigeringer virkelig å bruke de riktige SEO-ene for å bekjempe ulike dupliserte sider. Hvorfor bare de riktige SEO-ene? Ja, fordi feil personer kom inn på klientens nettsted og, som er ganske sannsynlig, begynte å kjøpe lenker uten å besøke nettstedet - dessverre, dette er ikke uvanlig. Jeg blir med jevne mellomrom oppsøkt av kunder som ønsker å sjekke integriteten til sine entreprenører/ansatte som har ansvar for å optimalisere og promotere siden, hvor godt arbeidet går - - og så langt har det aldri skjedd at jeg ikke har funnet feil eller mangler på nettstedene. Så husk - jeg er alltid glad for å hjelpe deg. La oss gå tilbake til duplikatene - jeg tror at i stedet for å blokkere duplikater fra indeksering, er det nødvendig å omdirigere til hovedadressen, og dette er ikke så interessant. Selvfølgelig er det mange tilfeller når opptak blir tvunget, og da kan du ikke klare deg uten kanonisering, men hvis du har muligheten til å foreta en omdirigering, sørg for å gjøre det. Hyppige tilfeller av duplikater som alltid må sjekkes: adresser med og uten skråstrek på slutten, adresser med parametere og etiketter - jeg vil fortelle deg hvordan du løser dette nedenfor.

Når kan du gjøre en 301-viderekobling?

Du kan ikke skrive mye i denne delen, men jeg skal prøve. Jeg håper virkelig at du etter å ha lest vil legge til et par ideer til meg i kommentarene.

Redirect 301 kan brukes som et serversvar i stedet for en 404-feil Ikke funnet– med andre ord, en bruker som følger en feil lenke eller en ikke-eksisterende side vil ikke se en melding som sier «Beklager, denne siden eksisterer ikke lenger», men vil bli overført til en annen eksisterende side. Dette er et veldig kontroversielt poeng blant eksperter, og derfor påtvinger jeg ingen min mening. Men jeg foretrekker å bruke en omdirigering i stedet for en 404-feil, og det er flere alternativer for utvikling av hendelser... Se, det er 2 kategorier med 404-feil: den første er klassisk, når siden faktisk er slettet, andre er når feilen vises på grunn av skjeve eksterne lenker. I det første tilfellet bør du sannsynligvis ikke gjøre en omdirigering, men la 404-feilen være som den er. Men i det andre tilfellet bør du ta vare på en omdirigering til riktig url-adresse, hvis den kan gjenopprettes fra en ødelagt lenke, eller en omdirigering til hovedsiden (eller kategorien).

Når du IKKE skal gjøre en 301-viderekobling

Noen få ord om når en omdirigering kan skade deg, og derfor bør den ikke brukes i følgende situasjoner.

Det viktigste er å unngå å gjøre feil, du bør ikke engasjere deg i redirects hvis du ikke er 100% sikker på hva du gjør eller tviler på noe. Ta dette som et vennlig råd :)

En permanent omdirigering bør ikke brukes for midlertidige løsninger, dette fremgår av navnet - for midlertidig flytting, bruk 302 Flyttet midlertidig. I dette tilfellet vil sidene ikke limes sammen, og siden med omdirigeringen kan gjenopprettes når som helst.

Hvis det er problemer med domenet ditt, for eksempel filtre, forbud osv., og du bestemmer deg for å endre nettstedsadressen (domene), bør du ikke gjøre en 301-omdirigering fra det gamle domenet til det nye - som et resultat , vil du "lim" og alle problemene til den gamle. Det vil si at ingenting vil endre seg til slutt. Ja, i noen tid var det en løsning for å komme ut av Google Penguin-filteret ved å bruke en full 301-viderekobling fra det gamle domenet til det nye. Faktisk ble alle posisjoner gjenopprettet til nivået før sanksjonene, og dette så ut til å være et universalmiddel for den onde pingvinen, men med neste oppdatering av algoritmen ble denne funksjonen tatt i betraktning og det nye domenet falt også under filteret, som et resultat ble ingenting bedre etter domeneendringen. Hvis du allerede har bestemt deg for å endre domenet, så kan du prøve å overføre alt innholdet til det nye domenet, og slette det på det gamle og sette opp en stubb med en melding om flyttingen, eller enda bedre, begynne på nytt fra bunnen av.

Det er mange måter å lage en 301-omdirigering på: gjennom htaccess, php, javascript, serverinnstillinger osv. - så du bør ikke prøve å bruke alle metoder samtidig, sannsynligheten for "uenigheter" mellom forskjellige måter og du kan for eksempel få en uendelig syklisk omdirigering.

Når du jobber med en kompleks nettstedstruktur eller redesigner en stor portal, oppstår ofte flere omdirigeringer eller lange kjeder. Dette betyr at omdirigeringen ikke skjer i ett trinn, men i to eller flere - dette er en dårlig situasjon og bør unngås hvis mulig. Når du klikker på denne lenken søkerobot, etter å ha mottatt flere omdirigeringer på rad, kan tro at han blir lurt og slutte å følge videre og slutte å ta hensyn til koblinger helt. Her er et eksempel fra min praksis: Jeg kom en gang over et nettsted for en revisjon med en slik uventet kjede:

http://site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30/ ->
http://www.site.hosting.ru/404.php ->
http://www.site.ru/404.php

Og til slutt gir siden http://www.site.ru/404.php, som skal gi en 404-feil, et 200 OK-svar. Dette tok til og med meg i hodet, men forestill deg hva en søkerobot ville tenkt hvis den kom inn i en slik karusell! Ikke bare deltok tre forskjellige domener i kjeden, men feilsiden sier også at det ikke er en feil og bør indekseres.

Hvis det er mulig, tilstrebe fravær av omdirigeringer på nettstedet - hvis eksterne lenker til nettstedet ikke kan korrigeres og en omdirigering er uunngåelig, bør interne lenker korrigeres. Dette påvirker kanskje ikke kvaliteten på indeksering og rangering, men du kan ikke være sikker, og derfor er det bedre å unngå slike kontroversielle situasjoner. En fantastisk en vil hjelpe deg med å spore interne omdirigeringer og generelt feil på nettstedet.

Når du oppretter omdirigeringsregler i .htaccess, ekskluder de virkelige adressene til kataloger og filer på serveren og overvåk utvalget. Situasjonen for et nettsted som jeg en gang fikk revidert var at i kampen mot dupliserte kategorisider med og uten skråstrek på slutten, overdrev webmaster det litt og tvert imot bare forverret problemet. Ikke bare påvirket omskrivningsreglene ekte js-skript og css-stilfiler, noe som førte til at de sluttet å fungere korrekt, men også noen sider fikk en unødvendig skråstrek på slutten og duplikater dukket opp. Venner, sørg nøye for at reglene du oppretter bare gjelder for gruppen av adresser du jobber med, og begrens alle andre.

For å søke etter problematiske sider og adressene deres som du må kvitte deg med, bruk mulighetene til nettredaktørpaneler fra Yandex og Google. For Yandex Webmaster: Velg et nettsted -> Nettstedindeksering -> Ekskluderte sider. For Google Webmaster: Velg nettsted –> Optimalisering –> HTML-optimalisering; Og også: Velg nettstedet -> Konfigurasjon -> URL-parametere.

Funksjoner for indeksering og re-indeksering av omdirigeringer i Yandex og Google. Når du sliter med duplikater og problematiske adresser, vil du selvfølgelig vente på at feil blir fjernet fra nettredaktørens paneler; det er noen funksjoner her. Med Google er alt enkelt - du setter opp omdirigeringer, endringene vil bli indeksert innen 2 uker, i løpet av samme tid vil feil begynne å forsvinne fra webmasters panel, vanligvis etter en måned forsvinner alle feil. Med Yandex er det en subtilitet, og dette er følgende: etter å ha satt opp omdirigeringer kan du vente evig på at feil forsvinner fra panelet. Jeg ventet en gang i seks måneder til jeg skrev til support, hvor de informerte meg om at i tillegg til omdirigeringen er det nødvendig å lukke problematiske sider i robots.txt i tillegg, og først da vil de forsvinne fra nettredaktørens panel.

Permanent omdirigering 301 via .htaccess

Denne metoden for å installere omdirigeringer er den mest populære og enkleste. Selv om, jeg må innrømme, alt ikke er så enkelt som det ser ut til, så jeg planlegger å skrive et eget innlegg om htaccess. På plussiden denne metoden Det kan bemerkes at omdirigeringen utløses på servernivå og før behandlingen av eventuelle nettstedsskript starter og ikke bærer noen ekstra belastning.

Du har sannsynligvis allerede en .htaccess-fil på serveren din (ved roten, der hovedindeksen.php er). Hvis denne filen ikke er synlig:

  • Sjekk innstillingene til ftp-behandleren, den kan skjule systemer og filer, som er htaccess-filen
  • Gå til filbehandler gjennom vertens kontrollpanel og sjekk tillatelsene for filen. Jeg mener ikke CHMOD, men en gruppe og en bruker, for eksempel, kan det være root-bruker, og du kobler til via ftp ved å bruke domeneeierens brukertilgang.
  • Filen kan rett og slett ikke eksistere :) Da bør den opprettes, men under Windows oppstår noen ganger et problem, pga faktisk blir .htaccess-filen sett av systemet som en fil uten navn og bare med filtype. Jeg foreslår en enkel måte - lag en vanlig txt-fil, legg til linjen "RewriteEngine On" (uten anførselstegn) til den, last opp txt-filen til serveren, endre navn på filen til .htaccess på serveren

De fleste omdirigeringsrelaterte redigeringer bør skrives helt i begynnelsen av filen etter "RewriteEngine On"-linjen slik at disse reglene behandles først. Det er viktig å følge handlingsrekkefølgen, fordi kommandoer behandles av serveren linje for linje fra begynnelsen til den første forekomsten. Du bør med andre ord alltid starte med et bestemt utvalg og avslutte med et mer generelt utvalg.

La oss se på noen av de vanligste og mest nyttige eksemplene:

301 omdirigering for et domene fra www.site.ru til site.ru

RewriteCond %(HTTP_HOST) !^www\.(.*) RewriteRule ^(.*)$ http://www.%1/$1

Ovennevnte omdirigeringsalternativer fungerer utmerket og krever ingen endringer fra din side - bare sett inn filen i .htaccess-filen. For å være 100 % sikker vil jeg imidlertid anbefale deg et annet alternativ:

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

Den første er for de som har et hoveddomene med www, den andre er for de uten www. Følgelig må du i begge eksemplene skrive inn navnet på domenet ditt i stedet for "nettsted".
Så hvorfor er disse alternativene bedre? Veldig enkelt sjekker de ikke bare fraværet/tilstedeværelsen av www i domenenavnet, men kontrollerer også domenenavnet for fullstendig samsvar.
Levende eksempel: Du har sikkert støtt på det faktum at et nettsted uventet kan indekseres av en tjenesteadresse på hostingen (en slik adresse er utstedt slik at nettstedet kan nås før du kobler til ditt virkelige domene), et speil eller til og med en IP adresse! Så, de universelle reglene vil kun bekrefte fraværet/tilstedeværelsen av www, og det spiller ingen rolle hvilket domene brukeren eller søkeroboten får tilgang til.
Så, ved å bruke det avanserte alternativet, vil du være 146 % sikker på at nettstedet ditt vil være tilgjengelig kun og utelukkende ved å bruke domenenavnet du personlig spesifiserte og tar hensyn til www. Jeg bruker bare dette alternativet og anbefaler det til deg!

301 omdirigering fra http til https

I lys av den massive overgangen av nettsteder til en sikker protokoll, må du vite hvordan du omdirigerer fra http til https. Forresten, hvis du ikke har valgt et SSL-sertifikat ennå, bør du lese innlegget mitt om .

Nedenfor tilbyr jeg deg flere alternativer for en 301 omdirigering fra http til https-protokollen, som kanskje eller kanskje ikke fungerer avhengig av konfigurasjonen av serveren din, men en av reglene vil definitivt passe deg:

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(SERVER_PORT) !^443 $ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(SERVER_PORT) !^443$ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) av RewriteCond %(HTTP:X-Forwarded-Proto) !https RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

Omdirigere fra https til http-protokoll (ærlig talt, jeg vet ikke hvorfor du trenger dette):

RewriteCond %(HTTPS) =on RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) =on RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

Nylig skrev jeg veldig detaljerte instruksjoner. Hvis du planlegger en overgang fra https til https, skylder du deg selv å lese den!

Jeg skal bringe litt klarhet til den uforståelige gobbledygook:

  • RewriteCond angir en tilstand som, hvis den samsvarer, vil utføre RewriteRule. Ved bruk av vanlig uttrykk strengmønstre er spesifisert.
  • Servervariabler:
    • %(REQUEST_URI) - en del av nettadressen uten domenenavn og GET-parametere, for eksempel for siden du leser for øyeblikket: blog/post/4393,
    • %(HTTP_HOST) - vert eller Domenenavn, for eksempel: nettsted
    • %(QUERY_STRING) - en streng med et sett med GET-parametere, det vil si delen av URL-en etter spørsmålstegnet (og før ankernettet, hvis det er et).
    • %(REQUEST_FILENAME) — full vei V filsystem server til en fil eller skript som tilsvarer denne forespørselen..php, men i serverfilsystemet er dette den forferdelige linjen /var/www/site/data/www/site/index.php.
      Det hender at når du foretar en omdirigering, får du et uventet resultat, for eksempel ville du fjerne parametrene post=17434801_4060 i adressen http://site.ru/page-name?post=17434801_4060 , indikerte de tilsvarende reglene ( de vil bli skrevet om nedenfor), men til slutt fikk vi linjen http://site.ru/usr/local/www/site.ru/www/page-name - vi ble kvitt parametrene, men fikk en merkelig adresse. Dette er alt fordi du ikke spesifiserte et RewriteBase / direktiv i begynnelsen av filen etter RewriteEngine On, som setter en spesifikk basis-URL for transformasjoner i konteksten av en katalog.
  • Metategn brukes til å definere grupper av tegn eller "tags" i et mønster:
    • ^ — linjestartmerke,
    • $ er slutten av linjen,
    • ! – fornektelse,
    • \ - escape skråstrek, lar deg betrakte metategn etter det som en vanlig karakter,
    • . – prikk, angir et hvilket som helst tegn, men bare ett,
    • () – gruppering.
  • Modifikatorer plasseres etter vanlige tegn, metategn eller deres grupper og utvider mulighetene for å bruke maler:
    • ? – symbolet gjentas 0 eller 1 gang,
    • * — Gjentas fra 0 til 65536 ganger,
    • + — Gjentas fra 1 til 65536 ganger.
  • Flaggene definerer tilleggsalternativer for denne regelen og er oppført i firkantede parenteser separert av kommaer:
    • NC - (nocase) deaktiverer sakskontroll.
    • R - (omdirigering) stopper konverteringsprosessen og returnerer resultatet til klientnettleseren som en omdirigering til denne siden(302, FLYTTET MIDLERTIDIG). Med dette flagget kan du spesifisere en annen resultatkode, for eksempel vil R=301 returnere en omdirigering med kode 301 (FLYTTET PERMANENT). Som du forstår, er dette akkurat det vi trenger.
    • L - (siste) stopper konverteringsprosessen og gjeldende kobling anses som endelig.

Det mest populære tilfellet er en 301 omdirigering fra index.php (html) til hovedsiden. På 90 % av nettstedene er det et problem med å duplisere hovedsiden på adressene http://site.ru og http://site.ru/index.php (eller index.html, index.htm eller et annet alternativ , det spiller ingen rolle, eller til og med alt på en gang). Et sted er dette åpenbart, når for eksempel en lenke fra logoen fører til site.ru, og en lenke i menyen fører til site.ru/index.php, et sted er det ikke åpenbart når en duplikat blir funnet når du går inn adressen fra index.php manuelt. Det er viktig å bare løse problemet. Og jeg tilbyr et universelt alternativ, her er det:

RewriteCond %(THE_REQUEST) ^(3 ,9 )\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

Bare lim inn denne koden uendret etter linjen etter "RewriteEngine On"-linjen og ikke noe problem!

Mange som begynner å slite med duplikater på siden lurer på hvor slike lenker som dupliserer hovedsiden http://site.ru/page-name.html&post=-1234567_8901 kommer fra? Hvor kom prefikset &post=-1234567_8901 fra - denne "gode" er hentet fra VKontakte, når noen deler en lenke til nettstedet ditt på veggen, i en gruppe eller offentlig, blir en lignende linje automatisk lagt til, tilsynelatende for å spore litt statistikk .

For å bli kvitt dette tullet en gang for alle må du legge til i htaccess:

RewriteCond %(REQUEST_URI) ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1

Som du kan se, er det ingen forskjell mellom dette og det forrige tilfellet, selv om du har &post= eller &sa= eller hva som helst i url-en, er løsningen den samme, du trenger bare å erstatte de åpenbare delene av koden. klart, ikke sant?

Bli kvitt parametere eller tagger i adressen

Spørsmålet ble stilt i kommentarfeltet og mange ganger på forumet, så det kan ikke ignoreres. Hva skal man gjøre med slike duplikater: http://site.ru/?abrakadabra eller et mer ekte tilfelle http://site.ru?utm_source=twitterfeed&utm_medium=twitter

Denne saken er litt forskjellig fra neste punkt, hvor vi vil bli kvitt parametere for PHP-skriptet, siden vi her ikke sender den vanlige adressen og parameterne til skriptet. Her er løsningen:

RewriteCond %(QUERY_STRING) ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php

%(QUERY_STRING) er en streng med et sett med variabler for PHP, delen av URL-en etter spørsmålstegnet (og før ankerhashen, hvis det er en).

Ring url - http://site.ru/index.php?lang=ru

RewriteCond %(QUERY_STRING) ^lang=ru $
Den forespurte url-en faller inn under denne regelen, det er ingen andre regler, så RewriteRule vil bli utført på linjen nedenfor.
RewriteRule ^(.*) \.php\?(.*) $ $1 \.php

Kilde-url: http://site.ru/index .php?lang=ru
Mal for url-parsing: ^(.*) \.php\?(.*) $
Nettadressen vil bli analysert i variabler: $1 = http://site.ru/index, $2 = lang=ru og satt sammen tilbake i formen http://site.ru/index .php ($1 \.php)
Og så blir det en 301-viderekobling til den nye url-en.

Eksempel på regler ved endring av nettstedsstruktur

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

Dette er linjene jeg måtte legge til i htaccess-filen da jeg endret strukturen på bloggen min.

Tidligere hadde jeg følgende adresser: https://site/post/4358 og https://site/post/category/seo, som på en eller annen måte brøt logikken i strukturen - tross alt er bloggen bare en del av nettstedet , men av en eller annen grunn tilhører innleggene siden, ikke bloggen, og kategoriene tilhører innleggene, noe som også er helt ulogisk..info/blog/category/seo - nå er bloggen en egen del av siden, og innleggene tilhører den, og kategoriene tilhører bloggen, ikke innleggene.

Fra samme eksempel er det tydelig at det er viktig å følge rekkefølgen av regler. Hvis jeg byttet linjene, det vil si at linjen RewriteRule ^post/(..info/blog/post/category/seo ville komme foran og ikke som den skal på https://site/blog/category/seo.

Og det siste eksemplet er analyse av en vanlig feil med adressen fra serverroten

For eksempel bestemte du deg for å fikse et problem når kategorisiden er tilgjengelig på to adresser http://site.ru/razdel/podrazdel/index.php og http://site.ru/razdel/podrazdel/. Den andre url er riktig og den viktigste, og url med index.php på slutten er en fullstendig duplikat som må avhendes.

For å omdirigere fra index.php til en kategori, skriver du følgende regel:

RewriteEngine på RewriteBase /

301 omdirigere fra side til side til en ny adresse

Det enkleste tilfellet er når du trenger å omdirigere en side til en annen adresse. Hvis du trenger å gjøre en omdirigering for flere sider, må du skrive flere regler, men i dette tilfellet er det bedre å bruke malene beskrevet ovenfor. Det er flere helt identiske syntaksalternativer:

Omdirigering 301 /sidenavn1.html http://site.ru/sidenavn2.html Omdirigering permanent /sidenavn1.html http://site.ru/sidenavn2.html OmdirigeringPermanent /sidenavn1.html http http://site.ru/page-name2.html

Omdirigering 301 /sidenavn1.html http://site.ru/sidenavn2.html Omdirigering permanent /sidenavn1.html http://site.ru/sidenavn2.html OmdirigeringPermanent /sidenavn1.html http http://site.ru/page-name2.html

Velg en av de tre, men personlig foretrekker jeg det første alternativet - det er kortere, enklere og mer forståelig. Forresten, her er ikke nødvendigvis site.ru det samme domenet, men et hvilket som helst annet.

La oss avslutte med .htaccess og gå videre til PHP.

Permanent omdirigering 301 ved hjelp av PHP

Jeg bruker vanligvis PHP redirect når det er problemer med .htaccess eller det viser seg at PHP-funksjonen viser seg å være mer logisk og forståelig.

Syntaksen til en 301 omdirigering i php ser slik ut:

Overskrift(); header("Sted: http://site.ru"); die("Omdirigere" );

header("HTTP/1.1 301 flyttet permanent"); header("Sted: http://site.ru"); die("Omdirigere");

Disse linjene forteller klientens nettleser at det er nødvendig å permanent omdirigere fra en forespurt side til adressen http://site.ru. I dette tilfellet kan http://site.ru ikke bare være adressen til hovedsiden til det gjeldende nettstedet, men kan også være et hvilket som helst annet nettsted. Hvis noe gikk galt og det oppsto en feil, vil vi se påskriften "Omdirigere" i nettleservinduet.

For å gjøre det klarere, her er noen eksempler på funksjoner som jeg skrev for bloggen min, for å prøve å løse visse problemer.

En funksjon som lar deg fjerne en bestemt del fra url-en

if (strpos($_SERVER["REQUEST_URI" ], "http://site" ) !== usant) ( $real_page_url = "http://site" .str_replace ("/http://site" , "" , $_SERVER["REQUEST_URI" ]); header ("HTTP/1.1 301 flyttet permanent" ); header ("Plassering: $real_page_url" ); die("Redirect" ); )

if (strpos($_SERVER["REQUEST_URI"], "http://site") !== false) ( $real_page_url = "http://site"..1 301 Flyttet permanent"); header("Sted: $real_page_url"); die("Redirect"); )

Når jeg hadde et problem med at en haug med 404-feil dukket opp i webmaster-panelet, var adressene til disse sidene som https://alaev..e. Fra et sted i adressen dukket det opp en duplikatadresse. Og så skrev jeg en funksjon som sjekker om URI (merk, ikke URL, men URI) inneholder oppføringen "http://site", og hvis den gjør det, kutter vi ut denne biten fra adressen og skriver resultatet til $real_page_url-variabelen, og så gjør vi en 301-omdirigering til riktig adresse fra variabelen.

Funksjon som fjerner etterfølgende skråstrek fra URL

if (($_SERVER["REQUEST_URI" ], - 1 , 1 ) == "/" ) ( $requested_url = rtrim($requested_url, "/" ); header ("HTTP/1.0 301 flyttet permanent" ); header ( "Sted: $requested_url" ); die("Redirect" ); )

if (($_SERVER["REQUEST_URI"], - 1, 1) == "/") ( $requested_url = rtrim($requested_url, "/"); header("HTTP/1.0 301 flyttet permanent"); header( "Sted: $requested_url"); die("Redirect"); )

Her er den enkleste funksjonen som ser for å se om den forespurte adressen til siden har en skråstrek på slutten, og hvis det er en, blir skråstreken kuttet av og en 301-omdirigering skjer til adressen uten skråstreken.

Det er mange flere alternativer som lar deg utstede en omdirigeringskommando på forskjellige programmeringsspråk, som ASP, Ruby on Rail, etc., men jeg er ikke kjent med disse språkene, så jeg skal ikke være smart og lure deg her . Omdirigeringer er også mulig ved å bruke meta-refresh-metakoden, samt omdirigeringer til javascript - men dette er skjebnen til uærlige døråpningsutviklere, og søkemotorer forstår ikke disse omdirigeringene; de ​​mottar et svar på 200 OK fra serveren. Så vi vurderer ikke disse alternativene.

Permanent Redirect 301 for nginx server

Husker du at jeg skrev om et speil av nettstedet mitt, tilgjengelig via IP? Som et resultat ble problemet løst av en omdirigering skrevet i serverkonfigurasjonsfilen, vanligvis plassert her /etc/nginx/nginx.conf. Følgende linjer ble skrevet der:

server (lytt 1.2.34.123:80 standard; servernavn _; omskriv ^/(.*)$ http://site.ru/$1 permanent; )

server (lytt 1.2.34.123:80 standard; servernavn _; omskriv ^/(.*)$ http://site.ru/$1 permanent; )

Det står her at hvis en IP-adresse er tilgjengelig via port 80, så er det nødvendig å gjøre en permanent omdirigering til site.ru.

Teknisk støtte anbefalte imidlertid ikke at jeg gjorde dette med ordene: "Det ville være mer riktig å konfigurere HTTP-serveren på en slik måte at den ganske enkelt lukker tilkoblingen hvis den åpnes på en adresse som ikke er eksplisitt spesifisert i HTTP-serverkonfigurasjon, dette er det mest pålitelige, enkle, et trygt og minst krevende alternativ for serverressurser. Etter en tid vil sider som ikke lenger er tilgjengelige, sannsynligvis bli kastet ut av søkemotorindeksen.»

Det neste rådet var dette: "Når du bare trenger å lukke forbindelsen i stedet for å omdirigere, spesifiser i stedet for linjen "rewrite ^/(.*)$ http://site.ru/$1 permanent;" en slik linje "retur 444;". Kjør deretter: "invoke-rc.d nginx reload"".

Kanskje dette vil hjelpe noen.

Eksempler på omdirigeringer i de vanligste tilfellene

Omdiriger for domenet www.site.ru til site.ru

server (lytt 80; servernavn site.ru; omskriv ^ http://www.site.ru$request_uri? permanent; )

Omdiriger fra adressen http://site.ru/index.php til http://site.ru/

plassering = /index.php (if ($request_uri = /index.php) (rewrite ^ http://$host? permanent;#301 redirect) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; inkluderer fastcgi_params; )

plassering = /index.php (if ($request_uri = /index.php) (rewrite ^ http://$host? permanent;#301 redirect) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; inkluderer fastcgi_params; )

Noe sånt. Jeg er ikke flink til å sette opp konfigurasjoner for nginx; Jeg nøyer meg alltid med Apache-innstillinger, så hvis du har spørsmål om nginx, er det usannsynlig at jeg kan hjelpe deg...

Hvordan sjekke HTTP-hoder og serverresponsstatuser

I denne delen ønsket jeg å beskrive ulike tjenester og plugins for å sjekke serverresponsen, men jeg forstår at dette innlegget allerede er så stort i volum at jeg må begrense meg til kun lenker til utvidelser for Chrome-nettlesere og Firefox.

HttpFox-tillegg for Firefox

HttpFox (her er en lenke til tillegget) er mitt favorittsporingsverktøy for http-header. HttpFox viser fremdriften for sidelasting linje for linje, som lar deg spore for eksempel kjeder med omdirigeringer og generelt rekkefølgen og hastigheten på sidelasting. Hvis du bruker Mozilla, anbefaler jeg det absolutt.

HTTP Headers-utvidelse for Chrome

Selv bruker jeg ikke HTTP Headers-utvidelsen (her er en lenke til den), men Internett rådet meg til å ta hensyn til den. Hvis du har bedre alternativer, vennligst post i kommentarene.

Dette avslutter mitt fryktelig lange og kjedelige innlegg, venner.
Takk for at du leste til slutten, jeg håper du fant det virkelig nyttig.

.htaccess-konfigurasjonsfilen er en konfigurasjon for Apache-webservere. De fleste vertssider fungerer gjennom denne serveren, så hvert nettsted har denne filen. Webmastere kan delvis kontrollere driften ved å gjøre sine egne endringer. I denne artikkelen skal vi se på direktiver og regler som kan endres i driften av serveren.

Den viktigste .htaccess-filen er plassert i roten av nettstedet:

Handlingene gjelder for gjeldende katalog og alle underkataloger. De. Nettstedseiere har muligheten til å påvirke bare arbeidet med prosjektet uten å forstyrre arbeidet til hele serveren. Hvis denne filen mangler, kan den opprettes ved hjelp av hvilken som helst notisblokk. Hovedsaken er at filnavnet skal være ".htaccess" - uten .txt, .doc, etc. formater.

301-omdirigeringer konfigureres oftest på servernivå gjennom .htaccess-filen, noe som i stor grad øker prosessen med å bytte til ny side, fordi du trenger ikke å laste inn en mellomside. Den spesifiserer også hvilken fil som behandler 404-feilen.

Nedenfor skal vi se på alle de vanlige alternativene for omdirigeringer via .htaccess, og først skal vi sette oss inn i alternativene og reglene.

For å kunne jobbe med omdirigeringer må du aktivere ReWriteEngine-modulen. For å gjøre dette må du skrive to linjer med kode (helst øverst i .htaccess-filen):

Alternativer +FølgSymLinks RewriteEngine On

Plasser disse linjene helt øverst i .htaccess-filen for å kunne jobbe med mod_write-moduldirektiver.

Mod_alias-modulene må også være aktivert på hostingen (for å støtte Redirect, RedirectPermanent og RedirectMatch).

1. Redirect, RewriteRule og RewriteCond-regler 1.1. Omdirigere direktiv

Omdirigeringssyntaks:

Omdirigere /fra http://to_full_address

Omdirigering angir en direkte omdirigering fra en side til en annen.

Omdirigeringskoden er skrevet i status. Er en valgfri parameter. Oftest skriver de 301, som signaliserer permanent endring av sideadressen.

Det er viktig at "fra"-siden skrives i et format uten å angi hele nettstedsadressen, men å angi hele den relative URL-adressen som starter med en skråstrek "/" (dvs. fra roten til nettstedet). Siden hvor omdirigeringen går, må skrives i sin helhet, dvs. absolutt URL-sideadresse (dvs. med domenenavnet og http- eller https-protokollen).

For eksempel

Omdirigere 301 /oldpage.php http://site/newpage.php

Du kan også skrive det annerledes

RedirectPermanent 301 /oldpage.php http://site/newpage.php eller Redirect permanent 301 /oldpage.php http://site/newpage.php 1.2. RewriteRule-direktivet

RewriteRule-direktivet setter overgangsreglene. Syntaksen er som følger:

Rewrite Rule Pattern Substitution [koder]
  • Når en ekstern omdirigering skjer, endres URL-en i nettleserlinjen - " "
  • Med intern - endrer ikke URL i nettleserlinjen - " " eller "[L] "
1.3. RewriteCond-direktivet

RewriteCond-direktivet definerer betingelsene som reglene i RewriteRule utføres under.

RewriteCond Comparison_String Condition

Disse begrepene kan for eksempel være brukerens nettleser, IP-adresse, tittel osv.

1.4. RedirectMatch-direktivet

RedirectMatch-direktivet ligner på Redirect, den eneste forskjellen er at det lar deg skrive regulære uttrykk.

RedirectMatch From Where To 2. Eksempler på 301 omdirigeringer i .htaccess

Vi har allerede sett på mange eksempler med en .htaccess-viderekobling i artiklene:

  • Endring av nettstedsadresse - omdirigere fra det gamle domenet til det nye

Her vil vi legge til alternativer for omdirigeringer som ikke eksisterte ennå.

2.1. Omdirigere fra en side til en annen

Omdiriger fra site.ru/cat/oldpage til site.ru/newpage.html

RewriteRule ^cat/oldpage.* /newpage.html

Eller det andre alternativet:

Omdirigere 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Omdiriger fra alle .htm-filer til .html RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html

Eller det andre alternativet:

RewriteRule ^(.*)\.htm$ $1.html 2.3. Omdiriger hele katalogen til en annen side

Enhver side i /old/-katalogen og underkataloger vil bli omdirigert til /new.php

RewriteRule ^old(.*)$ /new.php 2.4. Fjerne ekstra skråstreker fra en URL

For eksempel er siden /catalog///stranica.html tilgjengelig og åpnes. For å unngå denne situasjonen og ikke lage et uendelig antall duplikater, bør du skrive følgende omdirigering

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. Omskriv uten omdirigering

Du kan laste inn en annen side uten å endre sidens URL. La oss for eksempel laste inn siden /news.html, og adresselinjen vil vise adressen /news/happy

RewriteRule ^news/happy.* /news.html [L] 2.6. Legge til en etterfølgende skråstrek på slutten av hjemmesideadressen

For eksempel fungerer mange servere på en slik måte at den siste skråstreken ikke er skrevet i URL-en. For eksempel http://site.ru. Koden nedenfor løser dette problemet: nettstedet åpnes på http://site.ru/

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/ 2.7. Fjerner katalogkatalog fra URL

For å omdirigere fra siden site.com/directoriya/stranica.html til site.com/stranica.html, må du for eksempel skrive inn følgende:

RewriteRule ^directoriya/(.+)$ http://site.com/$1

Eller det andre alternativet:

RewriteCond %(DOCUMENT_ROOT)/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. Omdiriger GET-parametere

Omdiriger for eksempel fra siden /?act=page&id=2 til /page-2/

RewriteCond %(QUERY_STRING) act=page RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Omdirigere til mobilversjon nettsted m.site.ru

I dette eksemplet sjekker vi først at brukeren åpnet siden med mobil enhet(HTTP_USER_AGENT), så erstattes nettstedsadressen med m.URL

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib| symbian|trådløs|nokia|hånd|mobi|telefon|cdm|upb|lyd|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx |panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto |iphone|android) RewriteRule ^$ http://m.%1 2.10. Omdirigere fra et underdomene

La oss for eksempel omdirigere fra hvilken som helst side på underdomenet poddomen.site.ru til hoveddomenet site.ru

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI) 3. Andre eksempler med htaccess 3.1. Avvis IP-adresse og nettleser

Vi vil forby nettstedet fra å åpne for en bruker som bruker en IE-nettleser med IP-adressen 172.111.222.55

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Avslå en bestemt fil

La oss deaktivere filen disable_file.html for alle:

avslå fra alle 3.3. Tillat tilgang fra én IP

Tilgang vil kun tillates fra én IP-adresse 172.111.222.55

ordre nekte, tillat nekte fra alle tillat fra 172.111.222.55 3.4. Nekt tilgang fra forskjellige IP-er

Nekt tilgang til nettstedet fra flere IP-adresser 172.112.222.55, 172.113.222.55, 172.114.*.*

ordre nekte, tillate nekte fra alle nekte fra 172.112.222.55 nekte fra 172.113.222.55 nekte 172.114.*.* 3.5. Omdiriger URL fra store tegn til små

Alle store bokstaver i URL-en vil bli konvertert til små bokstaver.

RewriteRule - RewriteRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.* )$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*) F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^ I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q( .*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T] *)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^( [^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y $2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %(ENV:HASCAPS) TRUE RewriteRule ^/?(.*) /$1

Nok viktig poeng når du setter opp siden. En feilkonfigurert omdirigering kan i stor grad skade nettstedets søkeresultater. De vanligste situasjonene der du må bruke Permanent Redirect 301:

  • Endring av nettstedets adresse – du kjøpte domenet ditt og bestemte deg for å flytte fra site.example.com til site.ru
  • Liming av speil - hvis nettstedet ditt er tilgjengelig på www.site.ru og site.ru, søkemotorer kan vurdere dette som to forskjellige nettsteder, så først må du bestemme deg for hovedspeilet (med www eller uten www) og sette opp omdirigeringer til hovedspeilet.
  • Når en side (en eller flere) endret adresse, ble det på et tidspunkt klart at adressene http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 ikke var gode, og de måtte endres til http://example.com/sport/news12, men det er synd å miste posisjoner i søkemotorindeksen (siden dette vil være en ny artikkel for dem).
  • En annen måte å håndtere dupliserte sider på

Viktig: hvis siden har blitt flyttet midlertidig, bruk 302 Flyttet midlertidig. I dette tilfellet vil ikke sidene bli slått sammen, og siden med omdirigeringen kan alltid gjenopprettes.

Permanent Redirect 301 for apache (.htaccess)

Du må sette inn reglene umiddelbart etter linjene:

RewriteEngine På RewriteBase / # for å avkorte hele banen, fra serverroten til nettstedets rot

selve reglene er spesifisert ved hjelp av regulære uttrykk; husk syntaksen:

  • Metategn, for å spesifisere grupper av tegn eller "etiketter" i et mønster:
    • ^ - linjestartmerke,
    • $ - end-of-line-merke,
    • ! - fornektelse,
    • \ - escape skråstrek, lar deg betrakte metategn etter det som en vanlig karakter,
    • . - prikk, angir et hvilket som helst tegn, men bare ett,
    • () - gruppering.
  • Modifikatorer plasseres etter vanlige tegn, metategn eller deres grupper:
    • ? - symbolet gjentas 0 eller 1 gang,
    • * - gjentas fra 0 til 65536 ganger,
    • + - gjentas fra 1 til 65536 ganger.
  • Flagg definerer tilleggsalternativer for denne regelen:
    • NC - (nocase) deaktiverer sakskontroll.
    • R - (omdirigering) stopper konverteringsprosessen og returnerer resultatet til klientnettleseren som en omdirigering til denne siden (302, FLYTTET MIDLERTIDIG).
      Med dette flagget kan du spesifisere en annen resultatkode, for eksempel vil R=301 returnere en omdirigering med kode 301 (FLYTTET PERMANENT). Som du forstår, er dette akkurat det vi trenger.
    • L - (siste) stopper konverteringsprosessen og gjeldende kobling anses som endelig.

Tenk på de vanligste situasjonene:

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 RewriteCond angir betingelsen som, hvis matchet, vil utføre RewriteRule-regelen. Omdiriger fra index.php (html) til hovedsiden RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php| html |htm)$ $1 Omdirigering ved endring av nettstedstrukturen RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 Permanent Redirect 301 in PHP

For å informere nettleseren om at siden den har bedt om må omdirigeres til http://site.ru, kjør følgende kommandoer:

Header("HTTP/1.1 301 flyttet permanent"); header("Sted: http://site.ru"); exit();

Permanent omdirigering 301 for nginx

Omdirigeringsreglene er beskrevet i serverdelen.

Omdiriger fra www.site.ru til site.ru-serveren (lytt 80; servernavn www.site.ru; omskriv ^ http://site.ru$request_uri? permanent; )

eller generell regel for alle nettsteder:

Server ( server_name ~^(?! www\.); omskriv ^ http://www.$host$request_uri permanent; )

Omdiriger for fra site.ru til www.site.ru server (lytt 80; server_name site.ru; omskriv ^ http://www.site.ru$request_uri? permanent; ) Omdiriger fra index.php til hovedsidens plassering = / index.php ( if ($request_uri = /index.php) ( rewrite ^ http://$host? permanent;#301 redirect ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root $ fastcgi_script_name; inkluderer fastcgi_params; )

En HTTP-statuskode med status 301 flyttet permanent indikerer at det forespurte dokumentet er permanent flyttet til den nye URI-en som er spesifisert i feltet Sted i overskriften.

Hva er den til?

Først av alt, når du endrer domenenavnet til et nettsted, er det nødvendig å varsle søkemotorer om endringen i nettstedets adresse. For det andre å slå sammen nettstedsnavnet med og uten www. For det tredje, for raskt å overføre Page Rank til et nytt nettsted.

PHP

Metode én

Metode to

Perl

Metode én

$cgi = ny CGI; print $cgi->redirect("http://www.example.com/");

Metode to

#!/usr/bin/perl -w bruker streng; print "Status: 301 flyttet permanent\n"; print "Plassering: http://www.example.com/\n\n"; exit;

ASP.NET

Metode én

privat void Page_Load(objektavsender, System.EventArgs e) ( Response.Status = "301 flyttet permanent"; Response.AddHeader("Location","http://www.example.com"); )

Metode to (fra versjon 4.0)

RedirectPermanent("http://www.example.com");

ASP Ruby on Rails def do_something headers["Status"] = "301 flyttet permanent" redirect_to "http://www.example.com/" end ColdFusion Java (JSP) Apache Web Server (.htaccess)

Metode én (mod_alias, viderekobling)

Omdirigere 301 / http://www.example.com

Metode to (mod_alias, RedirectPermanent)

RedirectPermanent / http://www.example.com

Metode tre (mod_alias, omdirigering permanent)

Omdiriger permanent / http://www.example.com

Metode fire (mod_alias, RedirectMatch)

RedirectMatch 301 ^(.*)$ http://www.example.com/

Metode fem (mod_rewrite)

Alternativer +FølgSymLinks RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1




Topp