Hogyan állíthatok be átirányítást egy másik URL-re a PHP-ben az oldal betöltése előtt? Euroliga férfi ucp php átirányítás

6,1K

Tegyük fel, hogy a https://example.com/final.php oldalt szeretné megjeleníteni azoknak a felhasználóknak, akik a https://example.com/initial.php oldalra lépnek. Ez többféle PHP, JavaScript és HTML módszerrel is megtehető. Ebben a cikkben bemutatjuk azokat a módszereket, amelyek segítségével átirányíthatja a PHP-t egy másik oldalra.

Íme néhány változó, amelyeket használni fogunk:

A PHP header() függvény használata URL átirányítására

Ha átirányítást szeretne hozzáadni a kezdeti.php fájlról a final.php fájlra, akkor a következő kódot helyezheti el a kezdeti.php weboldalon. Új helyfejlécet küld a böngészőnek:

Itt a PHP header() függvényt használjuk az átirányítás létrehozásához. Ezt a kódot minden HTML vagy szöveg elé kell helyeznie. Ellenkező esetben hibaüzenetet kap, hogy a fejléc már el lett küldve. Kimeneti pufferelést is használhat a fejlécek küldésének hibáinak megelőzésére. A következő példa bemutatja ezt a PHP átirányítási technikát működés közben:

A header() függvény használatával történő átirányításhoz az ob_start() függvénynek kell az első függvénynek lennie a PHP-szkriptben. Ez megakadályozza a fejléchibák előfordulását.

További intézkedésként a fejléc átirányítása után azonnal hozzáadhatja a die() vagy exit() parancsot, hogy a weboldal kódjának többi része ne fusson le. Egyes esetekben előfordulhat, hogy a keresőrobotok vagy böngészők nem figyelnek a Hely fejlécben lévő jelzésre. Melyek a webhely biztonságát fenyegető lehetséges veszélyek:

Az egyértelműség kedvéért: a die()-nek vagy az exit()-nek semmi köze az átirányításokhoz. Arra használják, hogy megakadályozzák a weboldalon lévő kód többi részének végrehajtását.

Amikor PHP-ben átirányít egy oldalra, ajánlatos abszolút URL-eket használni a Location fejléc értékének megadásakor. De a relatív URL-ek is működni fognak. Ezzel a funkcióval a felhasználókat külső webhelyekre vagy weboldalakra is átirányíthatja.

JavaScript átirányítási kód kiadása a PHP echo() függvény segítségével

Ez nem egy tiszta PHP megoldás. Ugyanakkor hatásos is. Használhatja a PHP echo() függvényét az átirányítást kezelő JavaScript kód kiadására.

Ha ezt a megoldást használja, akkor nem kell kimeneti pufferelést használnia. Ez azt is megakadályozza, hogy a fejlécek küldésével kapcsolatos hibák előforduljanak.

Íme néhány példa, amelyek különböző JavaScript-módszereket használnak az aktuális oldalról a másikra való átirányításra:

Az egyetlen hátránya ennek a másik PHP webhelyre való átirányításnak az, hogy a JavaScript a kliens oldalon fut. És előfordulhat, hogy látogatóinál le van tiltva a JavaScript.

HTML metacímkék használata az átirányításhoz

Használhatja az alap HTML-t is az átirányításhoz. Lehet, hogy szakszerűtlennek tűnik, de működik. És nem kell attól tartania, hogy a JavaScript le van tiltva a böngészőjében, vagy korábban fejléchibát küldött:

Az előző példa utolsó sorát is használhatja az oldal automatikus frissítésére "n" másodpercenként. Például a következő kód 8 másodpercenként automatikusan frissíti az oldalt.

Hello barátok. Ma egy nagyon elcsépelt, de mindig aktuális témáról szeretnék beszélni - ez a 301 Redirect (Permanent Redirect 301) - a SEO közösségben, és formaságok nélkül pontosan ezt kell érteni az „átirányítás” szó alatt. Technikailag ez a szerver válasza egy kérésre; ennek a válasznak a kódja 301, ami azt jelzi, hogy a kérés címe véglegesen át lett helyezve. Mindezen ravasz machinációk eredményeként valami új végső címet kellene kapnunk.

Úgy gondolom, hogy nincs szüksége ezekre a technikai szempontokra, ezért szeretnék beszélni az alkalmazott dolgokról - mikor és milyen helyzetekben érdemes átirányítást használni, hogyan és milyen parancsokkal konfigurálhatja az átirányítási szabályokat stb. Figyelembe vesszük azokat az eszközöket és szolgáltatásokat is, amelyekkel ellenőrizheti az átirányítások helyességét.

Mivel a bejegyzés nagyon hosszúra sikerült, úgy döntöttem, készítek egy tartalomjegyzéket az Ön kényelme érdekében:

Mikor KELL 301-es átirányítást csinálni?

Mindenekelőtt az átirányítást akkor használjuk, ha egy oldal (oldalcsoport vagy egy teljes szakasz) megváltoztatta a címét – ez leggyakrabban akkor fordul elő, ha megváltozik a webhely szerkezete, az url fő része átnevez, vagy a címképzés elve megváltozik (más szóval CNC). Sajnos nem mindenki gondol erre, amikor változtat valamit az oldalon, és ennek következtében rengeteg a duplikáció, ami pozíciók elvesztéséhez, vagy akár szankciók kiszabásához vezet a keresők részéről. Munkám során nagyon gyakran találkozom ilyen helyzetekkel, és rengeteg idegbajba kerül mindennek a kijavítása és a következmények semlegesítése. A magam nevében azt tudom javasolni, hogy a CNC típusának vagy a szerkezet megváltoztatásával kapcsolatos bármilyen munka előtt készítsenek egy tervet az oldal jelenlegi szerkezetéről, annak minden szakaszáról és a végoldalak példáiról. Mindezt a munka végeztével ellenőrizni kell, hogy a régi címre lépve az újra jussunk, és a szerver 301-es (és ne 302-es) kóddal adjon átirányítást.

A 301-es átirányítások következő gyakori használata a webhely címének megváltoztatása vagy a tükrök összeragasztása. Ha úgy dönt, hogy a cég márkaváltásával összefüggésben megváltoztatja a weboldal címét, vagy új, szebb és rövidebb domaint regisztrál, hogy azt a nyomtatott promóciós termékeken jelezze, nagyon fontos, hogy a régi domainen lévő cím elérésekor a felhasználó ugyanarra az oldalra kerül (és nem a kezdőlapra), hanem egy új domainre. Ami a promóciós oldalakat illeti, ezek általában egy vagy két oldalból állnak, ahonnan a linkek a főoldalra vezetnek, vagy a promóciós oldalra lépve azonnal átirányítanak egy speciális oldalra a főoldalon. Előfordul, hogy egy weboldal létrehozásakor több domaint regisztrálnak egyszerre, például a cégnév latin nyelvű félreérthető írása miatt. Annak érdekében, hogy a felhasználó intuitív címbeíráskor a megfelelő helyre kerüljön, és több domain is legyen regisztrálva, nagyon fontos, hogy minden „kiegészítő” domainről 301-es átirányítás történjen egy fő címre. Semmilyen körülmények között nem szabad, hogy ugyanaz a webhely minden cím számára elérhető legyen.

És a tükrökről is - előfordulhat, hogy webhelye elérhető lesz a http://www.site.ru, http://site.ru és https://site.ru címeken (ez utóbbi ritka, de történik) - ez az összes klasszikus hiba, amelyet nem szabad elkövetni, és ezek megoldásában 301 átirányítás vesz részt. Csakúgy, mint a különböző webhelycímek esetében, el kell döntenie a főtükört (www-vel vagy anélkül), és be kell állítania a főtükörhöz való átirányításokat. Természetesen a keresőmotorok nem hülyék, és az ilyen helyzetekben gyakran maguktól is megbirkóznak, és Ön is segíthet rajtuk, ha elvégzi a megfelelő beállításokat a webmesteri paneleken és a robots.txt-ben (a Yandex esetében a Host direktíva). De a SEO kényes ügy, én nem a szerencsére bíznám, hanem egy bevált módszert alkalmaznék!

Néha nagyon kellemetlen helyzet adódik, amikor a webhely másolata nem csak akkor válik elérhetővé, amikor beírja a domain nevet a címsorba, hanem a szerver IP-címét is. Ez a helyzet nem valószínű, hogy megosztott tárhely esetén megtörténik, de ha van dedikált szervere, könnyen megtörténhet. Ez lehet az oka a helytelen szerverkonfigurációnak – az IP-cím elérésekor a hozzáférés letiltása segít a probléma megoldásában, de a legjobb megoldás itt a 301-es átirányítás a webszerver szintjén (Apache vagy Nginx). Néhány hónappal ezelőtt volt egy ilyen helyzetem - volt egy dedikált szerverem, amelyen néhány webhely lógott, de az egyik webhelyhez úgy döntöttem, hogy veszek egy másik külön szervert. Átvittem az oldalt, minden úgy működött, mint a karikacsapás, majd egy nap rábukkantam az oldalam klónjára a Google találatai között - döbbenet, pánik - kiderült, hogy ez az új szerverem IP-címe és természetesen az oldalam él rajta, és kapcsolatfelvételkor a szerver 200 OK választ ad, és a Google teljesen indexelte. Az előző szerveren nem volt ilyen probléma; kezdetben 301-es átirányítást állítottak be az IP-ről az ehhez az IP-címhez főként megadott tartományba. Most tanultam a keserű tapasztalatból, és mindig ellenőriztem az ilyen dolgokat - légy tudatában, és ne ismételd meg a hibákat. A problémát úgy oldottuk meg, hogy az nginx webszerver konfigurációihoz egy átirányítást adtak a fő tartományra; a kódra az alábbi bejegyzés gyakorlati részében mutatok példát.

A helyzet hasonló az előzőhöz - amikor a webhely másolata megtalálható és elérhető egy szolgáltatásteszt-tartományon keresztül, például a site.hosting.ru. Ilyen esetek az én gyakorlatomban is előfordulnak, és az előző esettől eltérően ez jellemző a virtuális tárhelyre. Miért létezik ez? Például még nem vásárolt tartományt, vagy egy webhelyet visz át egyik tárhelyről a másikra, de a tartományhoz tartozó NS-kiszolgálók nem változtak, vagy a szolgáltató DNS-rekordjai még nem frissültek. Ilyen helyzetekben tesztcímeket készítenek, ahol mindent beállíthat és telepíthet, mielőtt átirányítja a webhely címét egy új tárhelyre. Egyes tárhelyszolgáltatók pedig vétkeznek, ha nem blokkolják az ilyen technikai címekhez való hozzáférést, és még az indexelésüket sem tiltják meg. Ha ilyen kellemetlen helyzetbe kerül, próbáljon meg egy 301-es átirányítást regisztrálni a műszaki címről a fő címre a .htaccess fájlban.

És természetesen a 301-es átirányítások nagyon szeretik a megfelelő keresőoptimalizálókat használni a különféle ismétlődő oldalak leküzdésére. Miért csak a megfelelő keresőoptimalizálók? Igen, mert rossz emberek léptek be az ügyfél webhelyére, és ami nagyon valószínű, elkezdtek linkeket vásárolni anélkül, hogy felkeresték volna az oldalt - sajnos, ez nem ritka. Időről időre megkeresnek olyan ügyfelek, akik szeretnék ellenőrizni az oldal optimalizálásáért és népszerűsítéséért felelős vállalkozóik/alkalmazottaik tisztességét, hogy milyen jól megy a munka - - és eddig még nem fordult elő, hogy ne találtam volna hibát vagy hiányosságot az oldalakon. Tehát ne feledje – mindig szívesen segítek. Térjünk vissza a duplikátumokhoz - úgy gondolom, hogy ahelyett, hogy blokkolnák az ismétlődéseket az indexelésben, át kell irányítani a fő címre, és ez nem olyan érdekes. Természetesen nagyon sok olyan eset van, amikor az átvételt kényszerítik, és akkor nem nélkülözheti a kanonizálást, de ha van lehetősége átirányításra, mindenképpen tegye meg. Gyakori duplikációs esetek, amelyeket mindig ellenőrizni kell: címek perjellel és anélkül, címek paraméterekkel és címkékkel - az alábbiakban elmondom, hogyan lehet ezt megoldani.

Mikor lehet 301-es átirányítást végrehajtani?

Ebbe a rovatba nem lehet sokat írni, de igyekszem. Nagyon remélem, hogy elolvasása után néhány ötletet adsz hozzám a megjegyzésekben.

A 301-es átirányítás használható szerver válaszként a 404-es nem található hiba helyett – más szóval, ha a felhasználó egy hibás hivatkozásra vagy egy nem létező oldalra kattint, nem látja a következő üzenetet: „Sajnáljuk, ez az oldal már nem létezik. ", de egy másik meglévő oldalra kerül. Ez egy nagyon vitatott kérdés a szakértők körében, ezért nem kényszerítem rá a véleményemet senkire. De a 404-es hiba helyett inkább átirányítást használok, és több lehetőség is van az események fejlesztésére... Nézze, a 404-es hibáknak 2 kategóriája van: az első a klasszikus, amikor az oldal valóban törölve van, a a második az, amikor a hiba ferde külső hivatkozások miatt jelenik meg. Az első esetben valószínűleg nem kell átirányítást végrehajtania, hanem hagyja a 404-es hibát úgy, ahogy van. De a második esetben gondoskodni kell a megfelelő url címre történő átirányításról, ha az visszaállítható egy hibás linkről, vagy a főoldalra (vagy kategóriára) történő átirányításról.

Mikor NE végezzen 301-es átirányítást

Néhány szó arról, hogy az átirányítás mikor árthat Önnek, ezért ne használja a következő helyzetekben.

A legfontosabb, hogy kerüld a hibákat, ne keverj bele az átirányításba, ha nem vagy 100%-ig biztos abban, amit csinálsz, vagy kételkedsz valamiben. Ezt vedd baráti tanácsnak :)

Ideiglenes megoldásokhoz nem szabad állandó átirányítást használni, ez a nevéből is látszik - ideiglenes áthelyezéshez használja a 302 Moved Temporarily parancsot. Ebben az esetben az oldalak nem lesznek összeragasztva, és az átirányítással rendelkező oldal bármikor visszaállítható.

Ha problémák vannak a domainnel, például szűrők, kitiltások stb., és úgy dönt, hogy megváltoztatja a webhely címét (domainjét), akkor ne végezzen 301-es átirányítást a régi domainről az újra - ennek eredményeként , akkor „ragasztó” és minden probléma a régi. Vagyis a végén semmi sem fog változni. Igen, egy ideje volt megoldás arra, hogy a régi domainről az újba való teljes 301-es átirányítással kilépjünk a Google Penguin szűrőből. Valóban, minden pozíciót visszaállítottak a szankciók előtti szintre, és ez csodaszernek tűnt a gonosz Pingvin számára, de az algoritmus következő frissítésével ezt a funkciót is figyelembe vették, és az új domain is a szűrő alá került, ennek eredményeként semmi sem javult a tartományváltás után. Ha már eldöntötte, hogy módosítja a domaint, akkor megpróbálhatja az összes tartalmat átvinni az új domainre, és törölni a régiről, és elhelyezni egy csonkot az áthelyezésről szóló üzenettel, vagy még jobb, ha mindent elölről kezd a semmiből.

A 301-es átirányítás sokféleképpen lehetséges: htaccess-en, php-n, javascripten, szerverbeállításokon, stb. – így nem szabad az összes metódust egyszerre használni, túl nagy a valószínűsége, hogy a különböző metódusok között „nézeteltérések” keletkeznek, és kaphat például végtelen hurok átirányítást.

Ha összetett webhelystruktúrával dolgozik vagy egy nagy portált tervez újra, gyakran előfordul többszörös átirányítás vagy hosszú lánc. Ez azt jelenti, hogy az átirányítás nem egy, hanem kettő vagy több lépésben történik - ez rossz helyzet, és lehetőleg kerülni kell. Egy ilyen hivatkozás követésekor a keresőrobot, miután egymás után több átirányítást kapott, azt gondolhatja, hogy megtévesztik, és abbahagyja a további követést, és egyáltalán nem veszi figyelembe a linkeket. Íme egy példa az én gyakorlatomból: Egyszer ráakadtam egy auditálásra szánt webhelyre, ahol egy ilyen váratlan lánc volt:

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

És a végén a http://www.site.ru/404.php oldal, amelynek 404-es hibát kell adnia, 200 OK választ ad. Ez még a fejembe is ütött, de képzeld, mit gondolna egy keresőrobot, ha egy ilyen körhintaba kerülne! Nemcsak három különböző domain vett részt a láncban, de a hibaoldalon is szerepel, hogy ez nem hiba, ezért indexelni kell.

Lehetőleg törekedjünk az oldalon belüli átirányítások hiányára – ha az oldalra mutató külső hivatkozások nem javíthatók, és az átirányítás elkerülhetetlen, akkor a belső hivatkozásokat javítani kell. Ez nem befolyásolja az indexelés és a rangsorolás minőségét, de nem lehet biztos benne, ezért jobb elkerülni az ilyen vitás helyzeteket. Egy csodálatos eszköz segít a belső átirányítások és általában a webhelyen belüli hibák nyomon követésében.

Amikor átirányítási szabályokat hoz létre a .htaccess fájlban, zárja ki a kiszolgálón lévő könyvtárak és fájlok valódi címeit, és figyelje a kijelölést. Egy általam egykor auditált oldal esetében az volt a helyzet, hogy a duplikált kategóriás oldalak elleni küzdelemben a végén perjellel és anélkül, hogy a webmester egy kicsit túlzásba vitte, és éppen ellenkezőleg, csak súlyosbította a problémát. Az átírási szabályok nemcsak a valódi js-szkriptekre és css-stílusfájlokra voltak hatással, ami miatt leálltak a helyes működésük, hanem néhány oldal felesleges perjelet is kapott a végén, és ismétlődések jelentek meg. Barátaim, gondosan ügyeljenek arra, hogy az Ön által létrehozott szabályok csak arra a címcsoportra vonatkozzanak, amellyel dolgozik, és korlátozza az összes többit.

A problémás oldalak és azok címeinek kereséséhez, amelyektől meg kell szabadulnia, használja a Yandex és a Google webmesteri paneljeit. Yandex Webmester esetén: Válasszon ki egy webhelyet -> Webhelyindexelés -> Kizárt oldalak. Google Webmaster esetén: Válassza a webhely –> Optimalizálás –> HTML-optimalizálás menüpontot; És még: Válassza ki a webhelyet -> Konfiguráció -> URL-paraméterek.

Az átirányítások indexelésének és újraindexelésének jellemzői a Yandexben és a Google-ban. Ha ismétlődő címekkel és problémás címekkel küzd, természetesen meg kell várnia, amíg a hibákat eltávolítják a webmesteri panelekről; van néhány funkció. A Google-lal minden egyszerű - beállítja az átirányításokat, a változtatások 2 héten belül indexelésre kerülnek, ugyanakkor a hibák eltűnnek a webmesteri panelről, általában egy hónap múlva minden hiba eltűnik. A Yandexnél van egy finomság, ez pedig a következő: az átirányítások beállítása után örökre meg lehet várni, hogy a hibák eltűnjenek a panelről.Egyszer vártam hat hónapot, amíg írtam a supportnak, ahol közöltek, hogy ezen kívül az átirányításhoz a problémás oldalakat be kell zárni a robots.txt-ben, és csak ezután tűnnek el a webmesteri panelről.

Állandó átirányítás 301 keresztül .htaccess

Az átirányítások telepítésének ez a módja a legnépszerűbb és legegyszerűbb. Bár be kell vallanom, nem minden olyan egyszerű, mint amilyennek látszik, ezért tervezek egy külön bejegyzést írni a htaccessről. Ennek a módszernek az egyik előnye, hogy az átirányítás a kiszolgáló szintjén indul el, mielőtt a webhely parancsfájljainak feldolgozása megkezdődik, és nem jár további terheléssel.

Valószínűleg már van egy .htaccess fájl a szerverén (a gyökérben, ahol a fő index.php található). Ha ez a fájl nem látható:

  • Ellenőrizd az ftp manager beállításait, el tudja rejteni a rendszereket és a fájlokat, ami a htaccess fájl
  • Lépjen a fájlkezelőbe a hoster vezérlőpultján keresztül, és ellenőrizze a fájl engedélyeit. Nem CHMOD-ra gondolok, hanem például egy csoportra és egy felhasználóra, ott lehet a root felhasználó, és ftp-n keresztül csatlakozol a domain tulajdonos felhasználói hozzáférésével.
  • Lehet, hogy egyszerűen nem létezik a fájl :) Akkor létre kell hozni, de Windows alatt néha probléma adódik, mert valójában a .htaccess fájlt a rendszer név nélküli és csak kiterjesztésű fájlnak tekinti. Javaslom egy egyszerű módszert - hozzon létre egy normál txt fájlt, adja hozzá a „RewriteEngine On” sort (idézőjelek nélkül), töltse fel a txt fájlt a szerverre, nevezze át a fájlt .htaccess-re a szerveren.

A legtöbb átirányítással kapcsolatos szerkesztést a fájl legelejére kell írni a „RewriteEngine On” sor után, hogy először ezeket a szabályokat dolgozzák fel. Fontos betartani a cselekvések sorrendjét, mert A parancsokat a szerver soronként dolgozza fel a kezdetektől az első előfordulásig. Más szóval, mindig egy adott mintával kell kezdenie, és egy általánosabb mintával kell befejeznie.

Nézzünk néhányat a leggyakoribb és leghasznosabb példák közül:

301-es átirányítás egy domainhez a www.site.ru webhelyről a site.ru oldalra

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

A fenti átirányítási beállítások remekül működnek, és nem igényelnek semmilyen változtatást az Ön részéről – csak helyezze be a fájlt a .htaccess fájlba. A 100%-os biztonság érdekében azonban egy másik lehetőséget javasolnék:

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

Az első azoknak szól, akiknek fő domainjük van www-vel, a második pedig azoknak, akiknek nincs www. Ennek megfelelően mindkét példában meg kell adnia a domain nevét a „site” helyett.
Tehát miért jobbak ezek a lehetőségek? Nagyon egyszerűen nem csak a www hiányát/meglétét ellenőrzik a domain névben, hanem a domain név teljes megfelelőségét is.
Élő példa: Biztosan találkozott már azzal a ténnyel, hogy váratlanul egy webhelyet indexelhet a tárhelyen található szolgáltatási cím (ilyen címet azért adnak ki, hogy az oldal elérhető legyen a valódi domain összekapcsolása előtt), valamilyen tükör vagy akár IP-cím. cím! Tehát az univerzális szabályok csak a www hiányát/meglétét ellenőrzik, és nem mindegy, hogy a felhasználó vagy a keresőrobot melyik domainhez fér hozzá.
A speciális opció használatával tehát 146%-ban biztos lehet abban, hogy webhelye csak és kizárólag az Ön által személyesen megadott domain név használatával, valamint a www. Csak ezt a lehetőséget használom és ajánlom Neked!

301 átirányítás http-ről https-re

A webhelyek biztonságos protokollra való jelentős átállásának fényében tudnia kell, hogyan kell átirányítani a http-ről a https-re. Egyébként, ha még nem választottál SSL-tanúsítványt, akkor érdemes elolvasnod a bejegyzésemet.

Az alábbiakban számos lehetőséget kínálok a 301-es átirányításra a http protokollról https protokollra, amelyek a szerver konfigurációjától függően működhetnek vagy nem, de az egyik szabály biztosan megfelel Önnek:

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) !a RewriteRule-on ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !a RewriteRule-on ^(.*)$ 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) kedvezmény RewriteCond %(HTTP:X-Forwarded-Proto) !https RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

Átirányítás https-ről http protokollra (őszintén szólva nem tudom, miért lehet szüksége erre):

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

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

Nemrég írtam egy nagyon részletes útmutatót. Ha a https-ről a https-re való átállást tervezi, akkor magának köszönheti, hogy elolvassa!

Hadd vigyek egy kis világosságot az érthetetlen zagyvaságba:

  • A RewriteCond egy olyan feltételt jelöl, amely egyezés esetén végrehajtja a RewriteRule-t. A reguláris kifejezések a karakterlánc-minták meghatározására szolgálnak.
  • Szerverváltozók:
    • %(REQUEST_URI) – az URL egy része domain név és GET paraméterek nélkül, például az éppen olvasott oldalhoz: blog/post/4393,
    • %(HTTP_HOST) - gazdagép vagy domain név, például: webhely
    • %(QUERY_STRING) - egy karakterlánc GET-paraméterkészlettel, vagyis az URL-nek a kérdőjel utáni része (és a horgonyrács előtt, ha van ilyen).
    • A %(REQUEST_FILENAME) a ​​szerver fájlrendszerében a kérésnek megfelelő fájl vagy szkript teljes elérési útja..php, de a szerver fájlrendszerében ez a szörnyű sor /var/www/site/data/www/site/ index.php.
      Előfordul, hogy az átirányítás során váratlan eredményt kap, például el akarta távolítani a post=17434801_4060 paramétereket a http://site.ru/page-name?post=17434801_4060 címről, jelezve a megfelelő szabályokat ( róluk lentebb írunk), de végül megkaptuk a http://site.ru/usr/local/www/site.ru/www/page-name sort - megszabadultunk a paraméterektől, de kaptunk egy furcsa cím. Mindez azért van, mert nem adott meg egy RewriteBase / direktívát a fájl elején a RewriteEngine On után, amely egy adott, alap URL-t állít be a könyvtár kontextusában történő átalakításokhoz.
  • A metakarakterek karaktercsoportok vagy "címkék" meghatározására szolgálnak egy mintában:
    • ^ — sor kezdőjel,
    • $ a sorvégi jel,
    • ! - tagadás,
    • \ - escape perjel, lehetővé teszi, hogy az őt követő metakaraktert szabályos karakternek tekintse,
    • . – pont, bármely karaktert jelöl, de csak egyet,
    • () – csoportosítás.
  • A módosítók a szokásos karakterek, metakarakterek vagy csoportjaik után helyezkednek el, és kiterjesztik a sablonok használatának lehetőségeit:
    • ? — a szimbólum 0 vagy 1 alkalommal ismétlődik,
    • * — 0-tól 65536-ig ismételve,
    • + — 1-től 65536-ig ismétlődik.
  • A zászlók további opciókat határoznak meg ehhez a szabályhoz, és szögletes zárójelben vannak felsorolva, vesszővel elválasztva:
    • NC - (nocase) letiltja az esetek ellenőrzését.
    • Az R - (átirányítás) leállítja a konverziós folyamatot, és az eredményt visszaküldi az ügyfélböngészőnek, mint átirányítást erre az oldalra (302, MOVED TEMPORARY). Ezzel a jelzővel más eredménykódot is megadhat, például az R=301 301-es kódú átirányítást ad vissza (VÉGLEGESEN ELHELYEZVE). Mint érti, pontosan erre van szükségünk.
    • L - (utolsó) leállítja az átalakítási folyamatot, és az aktuális link véglegesnek minősül.

A legnépszerűbb eset a 301-es átirányítás az index.php-ről (html) a főoldalra. A webhelyek 90%-án probléma van a főoldal másolásával a http://site.ru és http://site.ru/index.php címeken (vagy index.html, index.htm vagy bármely más lehetőség , mindegy, vagy akár egyszerre). Valahol ez nyilvánvaló, amikor például a logó linkje a site.ru oldalra vezet, a menüben pedig a site.ru/index.php oldalra vezet, valahol ez nem nyilvánvaló, ha a belépéskor másolatot találnak. az index.php címét manuálisan. Fontos, hogy egyszerűen megoldjuk a problémát. És kínálok egy univerzális lehetőséget, itt van:

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

Csak illessze be ezt a kódot változatlanul a "RewriteEngine On" sor utáni sor után, és nincs probléma!

Sokan, akik elkezdenek küzdeni a webhely ismétlődéseivel, kíváncsiak, honnan származnak az ilyen hivatkozások, amelyek a http://site.ru/page-name.html&post=-1234567_8901 főoldalt duplikálják? Honnan származik a &post=-1234567_8901 előtag - ez a „jó” a VKontakte-ból származik, amikor valaki megosztja az Ön webhelyére mutató hivatkozást a falán, egy csoportban vagy nyilvánosan, a rendszer automatikusan hozzáad egy hasonló sort, nyilvánvalóan bizonyos statisztikák nyomon követésére .

Ahhoz, hogy egyszer és mindenkorra megszabaduljon ettől a hülyeségtől, hozzá kell adnia a htaccess-hez:

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

Mint látható, nincs különbség ez és az előző eset között, még ha az url-ben van is &post= vagy &sa= vagy bármi, a megoldás ugyanaz, csak ki kell cserélni a kód nyilvánvaló részeit. világos, igaz?

Paraméterek vagy címkék eltávolítása a címben

A kérdés kommentekben és a fórumon is sokszor elhangzott, így nem lehet figyelmen kívül hagyni. Mi a teendő az ilyen másolatokkal: http://site.ru/?abrakadabra vagy egy valósabb eset http://site.ru?utm_source=twitterfeed&utm_medium=twitter

Ez az eset némileg eltér a következő ponttól, ahol megszabadulunk a PHP szkript paramétereitől, mivel itt nem a szokásos címet és paramétereket adjuk át a szkriptnek. Íme a megoldás:

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

A %(QUERY_STRING) egy karakterlánc változókészlettel a PHP számára, az URL-nek a kérdőjel utáni része (és a horgonykivonat előtt, ha van ilyen).

Hívja az url-t - http://site.ru/index.php?lang=ru

RewriteCond %(QUERY_STRING) ^lang=ru $
A kért url erre a szabályra vonatkozik, nincs más szabály, így a RewriteRule az alábbi sorban fog végrehajtódni.
RewriteRule ^(.*) \.php\?(.*) $1 \.php

Forrás URL: http://site.ru/index .php?lang=ru
URL-elemző sablon: ^(.*) \.php\?(.*) $
Az URL-t a rendszer a következő változókra elemezi: $1 = http://site.ru/index, $2 = lang=ru, és összeállítja a következő formában: http://site.ru/index .php ($1 \.php)
És akkor lesz egy 301-es átirányítás az új URL-re.

Példa szabályokra a webhely szerkezetének megváltoztatásakor

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

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

Ezeket a sorokat kellett hozzáadnom a htaccess fájlhoz, amikor megváltoztattam a blogom szerkezetét.

Korábban a következő címeim voltak: https://site/post/4358 és https://site/post/category/seo, ami valahogy megtörte a logikát a szerkezetben – elvégre a blog csak egy része az oldalnak , de valamiért a posztok az oldalhoz tartoznak, nem a bloghoz, és a posztokhoz tartoznak a kategóriák, ami szintén teljesen logikátlan..info/blog/category/seo - most a blog egy külön része az oldalnak, és a bejegyzések hozzá tartoznak, és a kategóriák a bloghoz tartoznak, nem a bejegyzések.

Ugyanebből a példából kitűnik, hogy fontos betartani a szabályok sorrendjét. Ha felcserélném a sorokat, vagyis a RewriteRule ^post/(..info/blog/post/category/seo sor kerülne elé, és nem úgy, ahogy kellene a https://site/blog/category/seo oldalon.

Az utolsó példa pedig egy gyakori hiba elemzése a kiszolgáló gyökérének címével

Például úgy döntött, hogy megold egy problémát, amikor a kategóriaoldal két címen érhető el: http://site.ru/razdel/podrazdel/index.php és http://site.ru/razdel/podrazdel/. A második url a helyes és a fő, az index.php-vel a végén lévő URL pedig egy teljes másolat, amelyet meg kell semmisíteni.

Az index.php fájlról egy kategóriára való átirányításhoz a következő szabályt kell beírni:

RewriteEngine a RewriteBase-en /

301-es átirányítás oldalról oldalra egy új címre

A legegyszerűbb eset az, amikor egy oldalt át kell irányítani egy másik címre. Ha több oldalra kell átirányítást készítenie, akkor több szabályt kell megírnia, de ebben az esetben érdemesebb a fent leírt sablonokat használni. Számos teljesen azonos szintaktikai lehetőség létezik:

Átirányítás 301 /page-name1.html http://site.ru/page-name2.html Átirányítás állandó /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Átirányítás 301 /page-name1.html http://site.ru/page-name2.html Átirányítás állandó /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Válasszon egyet a három közül, de én személy szerint az első opciót részesítem előnyben - ez rövidebb, egyszerűbb és érthetőbb. Mellesleg itt a site.ru nem feltétlenül ugyanaz a domain, hanem bármely más.

Fejezzük be a .htaccess-el, és folytassuk a PHP-t.

Állandó átirányítás 301 PHP használatával

Általában akkor használom a PHP átirányítást, ha nehézségek vannak a .htaccess-szel, vagy kiderül, hogy a PHP függvény logikusabbnak és érthetőbbnek bizonyul.

A 301-es átirányítás szintaxisa php-ben így néz ki:

fejléc(); header("Helyszín: http://site.ru"); die("Átirányítás" );

header("HTTP/1.1 301 véglegesen áthelyezve"); header("Helyszín: http://site.ru"); die("Átirányítás");

Ezek a sorok azt jelzik az ügyfél böngészőjének, hogy valamilyen kért oldalról véglegesen át kell irányítani a http://site.ru címre. Ebben az esetben a http://site.ru nem csak az aktuális webhely főoldalának címe lehet, hanem bármely más webhely is. Ha valami hiba történt, és hiba történt, akkor a böngészőablakban megjelenik az „Átirányítás” felirat.

Az érthetőség kedvéért íme néhány példa azokra a funkciókra, amelyeket blogoldalamhoz írtam, és megpróbáltam megoldani bizonyos problémákat.

Egy funkció, amely lehetővé teszi egy bizonyos rész eltávolítását az URL-ből

if (strpos($_SERVER["REQUEST_URI" ], "http://site" ) !== false) ( $real_page_url = "http://site" .str_replace ("/http://site" , "" , $_SERVER["REQUEST_URI" ]); fejléc ("HTTP/1.1 301 véglegesen áthelyezve"); fejléc ("Hely: $real_page_url" ); die("Átirányítás" ); )

if (strpos($_SERVER["REQUEST_URI"], "http://site") !== false) ( $real_page_url = "http://site"..1 301 Véglegesen áthelyezve"); header("Hely: $valódi_oldal_url"); die("Átirányítás"); )

Egyszer volt egy olyan problémám, hogy egy csomó 404-es hiba jelent meg a webmester panelen, ezeknek az oldalaknak a címe a következő volt: https://alaev..e. Valahonnan a címben egy duplikált webhelycím jelent meg. Aztán írtam egy függvényt, ami ellenőrzi, hogy az URI-ban (nem az URL-ben, hanem az URI-ban) van-e „http://site” bejegyzés, és ha igen, akkor kivágjuk ezt a részt a címből, és megírjuk az eredményt. a $real_page_url változóba, majd 301-es átirányítást végzünk a változóból a megfelelő címre.

Funkció, amely eltávolítja a perjelet az URL-ből

if (($_SERVER["REQUEST_URI" ], - 1 , 1 ) == "/" ) ( $requested_url = rtrim($requested_url, "/" ); fejléc ("HTTP/1.0 301 véglegesen áthelyezve"); fejléc ( "Hely: $requested_url" ); die("Átirányítás" ); )

if (($_SERVER["REQUEST_URI"], - 1, 1) == "/") ( $requested_url = rtrim($requested_url, "/"); header("HTTP/1.0 301 véglegesen áthelyezve"); fejléc( "Hely: $requested_url"); die("Átirányítás"); )

Itt van a legegyszerűbb függvény, amely megnézi, hogy az oldal kért címének van-e perjel a végén, és ha van, akkor a perjel le van vágva, és a 301-es átirányítás történik a perjel nélküli címre.

Sokkal több lehetőség van, amelyek lehetővé teszik az átirányítási parancs kiadását különböző programozási nyelveken, mint például az ASP, Ruby on Rail stb., de nem ismerem ezeket a nyelveket, ezért nem leszek okos és nem fogok itt átverni. . Átirányítás is lehetséges a meta refresh metatag használatával, valamint a javascriptre való átirányítás – de ez a tisztességtelen kapualjfejlesztők sorsa, a keresők pedig nem értik ezeket az átirányításokat, 200 OK választ kapnak a szervertől. Tehát ezeket a lehetőségeket nem mérlegeljük.

Állandó átirányítás 301 nginx szerverhez

Emlékszel, hogy a webhelyem egy IP-n keresztül elérhető tükréről írtam? Ennek eredményeként a problémát a szerver konfigurációs fájljába írt átirányítás oldotta meg, amely általában itt található /etc/nginx/nginx.conf. A következő sorokat írták oda:

szerver (figyeljen 1.2.34.123:80 alapértelmezett; szerver_neve _; ^/(.*)$ átírása http://site.ru/$1 állandó; )

szerver (figyeljen 1.2.34.123:80 alapértelmezett; szerver_neve _; ^/(.*)$ átírása http://site.ru/$1 állandó; )

Itt azt írja ki, hogy ha egy IP-címet a 80-as porton keresztül érnek el, akkor állandó átirányítást kell végezni a site.ru oldalra.

A technikai támogatás azonban nem javasolta, hogy ezt tegyem meg a következő szavakkal: „Helyesebb lenne a HTTP-kiszolgálót úgy konfigurálni, hogy egyszerűen lezárja a kapcsolatot, ha olyan címen éri el, amely nincs kifejezetten megadva a HTTP szerver konfiguráció, ez a legmegbízhatóbb, legegyszerűbb, legbiztonságosabb és legkevésbé igényes lehetőség a szervererőforrások számára. Egy idő után a már nem elérhető oldalak valószínűleg kikerülnek a keresőmotor indexéből.”

A következő tanács a következő volt: "Ha egyszerűen be kell zárnia a kapcsolatot az átirányítás helyett, akkor a sor helyett adja meg a "rewrite ^/(.*)$ http://site.ru/$1 permanent;" parancsot. egy ilyen sor "444; vissza". Ezután futtassa: "invoke-rc.d nginx reload"".

Talán ez segít valakinek.

Példák az átirányításokra a leggyakoribb esetekben

A www.site.ru domain átirányítása a site.ru oldalra

szerver ( figyelj 80; szerver_neve site.ru; újraírd ^ http://www.site.ru$request_uri? állandó; )

Átirányítás a http://site.ru/index.php címről a http://site.ru/ címre

location = /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; tartalmazza fastcgi_params; )

location = /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; tartalmazza fastcgi_params; )

Valami hasonló. Nem vagyok jó az nginx konfigurációinak beállításában; mindig beérem az Apache beállításait, így ha bármilyen kérdése van az nginx-szel kapcsolatban, valószínűleg nem tudok segíteni...

A HTTP-fejlécek és a szerver válaszállapotainak ellenőrzése

Ebben a részben szerettem volna leírni a szerver válaszának ellenőrzésére szolgáló különféle szolgáltatásokat és bővítményeket, de megértem, hogy ez a bejegyzés már olyan nagy terjedelmű, hogy a Chrome és a Firefox böngészők bővítményeire mutató hivatkozásokra kell korlátoznom magam.

HttpFox kiegészítő a Firefoxhoz

A HttpFox (itt van egy link a kiegészítőhöz) a kedvenc http-fejléckövető eszközöm. A HttpFox soronként mutatja meg az oldalbetöltés folyamatát, ami lehetővé teszi például az átirányítási láncok követését, és általában az oldalbetöltés sorrendjét és sebességét. Ha Mozillát használsz, akkor mindenképpen ajánlom.

HTTP-fejléc-bővítmény a Chrome-hoz

Jómagam nem használom a HTTP Headers kiterjesztést (itt van egy link hozzá), de az internet azt tanácsolta, hogy figyeljek rá. Ha van jobb lehetőséged, írd meg kommentben.

Ezzel véget is ért a borzasztóan hosszú és unalmas bejegyzésem, barátaim.
Köszönöm, hogy a végéig elolvastad, remélem tényleg hasznosnak találtad.

A .htaccess konfigurációs fájl az Apache webszerverek konfigurációja. A legtöbb tárhely ezen a szerveren keresztül működik, így minden webhely rendelkezik ezzel a fájllal. A webmesterek saját változtatásokkal részben szabályozhatják a működését. Ebben a cikkben azokat a direktívákat és szabályokat tekintjük át, amelyek módosíthatók a szerver működésében.

A legfontosabb .htaccess fájl a webhely gyökerében található:

Műveletei az aktuális könyvtárra és az összes alkönyvtárra vonatkoznak. Azok. A webhelytulajdonosoknak lehetőségük van csak a projektjük munkáját befolyásolni anélkül, hogy az egész szerver munkáját megzavarnák. Ha ez a fájl hiányzik, bármilyen jegyzettömb segítségével létrehozható. A lényeg az, hogy a fájlnév ".htaccess" legyen - .txt, .doc stb. formátumok nélkül.

A .htaccess fájl használatával a 301-es átirányításokat leggyakrabban szerver szinten konfigurálják, ami nagyban felgyorsítja az új oldalra költözés folyamatát, mert nem kell köztes oldalt betölteni. Azt is meghatározza, hogy melyik fájl dolgozza fel a 404-es hibát.

Az alábbiakban áttekintjük a .htaccess-en keresztüli átirányítás összes gyakori beállítását, és először megismerkedünk a lehetőségekkel és szabályokkal.

Az átirányítások használatához engedélyeznie kell a ReWriteEngine modult. Ehhez két sornyi kódot kell írnia (lehetőleg a .htaccess fájl legtetejére):

Opciók +FollowSymLinks RewriteEngine On

Helyezze ezeket a sorokat a .htaccess fájl legtetejére, hogy működjön a mod_write modul direktívákkal.

Ezenkívül a mod_alias modulokat engedélyezni kell a tárhelyen (az átirányítás, a RedirectPermanent és a RedirectMatch támogatásához).

1. Átirányítási, RewriteRule és RewriteCond szabályok 1.1. Átirányítási direktíva

Átirányítási szintaxis:

Átirányítás / from http://to_full_address

Az átirányítás közvetlen átirányítást állít be egyik oldalról a másikra.

Az átirányítási kód állapotba van írva. Nem kötelező paraméter. Leggyakrabban 301-et írnak, ami az oldal címének végleges változását jelzi.

Fontos, hogy a „feladó” oldal olyan formátumban legyen megírva, amely nem tartalmazza a teljes webhelycímet, hanem a teljes relatív URL-t, amely perjellel kezdődik (vagyis a webhely gyökerétől). Azt az oldalt, ahova az átirányítás megy, teljes egészében meg kell írni, pl. abszolút URL-oldal címe (azaz a domain névvel és a http vagy https protokollal).

Például

Átirányítás 301 /oldpage.php http://site/newpage.php

Leírhatod másképp is

RedirectPermanent 301 /oldpage.php http://site/newpage.php vagy Redirect permanent 301 /oldpage.php http://site/newpage.php 1.2. RewriteRule direktíva

A RewriteRule direktíva állítja be az átmeneti szabályokat. A szintaxis a következő:

RewriteRule Pattern Substitution [kódok]
  • Külső átirányítás esetén az URL a böngésző sorában megváltozik - " "
  • Belsővel - nem módosítja az URL-t a böngésző sorában - " " vagy "[L] "
1.3. RewriteCond direktíva

A RewriteCond direktíva határozza meg azokat a feltételeket, amelyek mellett a RewriteRule szabályai végrehajtásra kerülnek.

RewriteCond Comparison_String feltétel

Ezek a kifejezések lehetnek például a felhasználó böngészője, IP-címe, címe stb.

1.4. RedirectMatch direktíva

A RedirectMatch direktíva hasonló az átirányításhoz, az egyetlen különbség az, hogy lehetővé teszi reguláris kifejezések írását.

RedirectMatch honnan hova 2. Példák 301-es átirányításokra a .htaccess fájlban

A cikkekben már sok példát megnéztünk .htaccess átirányítással:

  • Webhely címének megváltoztatása – átirányítás a régi domainről az újra

Itt olyan átirányítási lehetőségeket adunk hozzá, amelyek még nem léteztek.

2.1. Átirányítás egyik oldalról a másikra

Átirányítás a site.ru/cat/oldpage oldalról a site.ru/newpage.html oldalra

RewriteRule ^cat/oldpage.* /newpage.html

Vagy a második lehetőség:

Átirányítás 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Átirányítás az összes .htm fájlból ide: .html RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html

Vagy a második lehetőség:

RewriteRule ^(.*)\.htm$ $1.html 2.3. A teljes könyvtár átirányítása egy másik oldalra

A /old/ könyvtár és az alkönyvtárak bármelyik oldala át lesz irányítva a /new.php címre

RewriteRule ^old(.*)$ /new.php 2.4. További perjelek eltávolítása egy URL-ből

Például a /catalog///stranica.html oldal elérhető és megnyílik. Ennek elkerülése érdekében, és ne hozzon létre végtelen számú ismétlődést, írja be a következő átirányítást

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. Újraírás átirányítás nélkül

Az oldal URL-jének megváltoztatása nélkül betölthet másik oldalt. Például töltsük be a /news.html oldalt, és a címsorban a /news/happy cím jelenik meg.

RewriteRule ^news/happy.* /news.html [L] 2.6. Záró perjel hozzáadása a kezdőlap címének végéhez

Például sok szerver úgy működik, hogy az utolsó perjel nem kerül bele az URL-be. Például: http://site.ru. Az alábbi kód megoldja ezt a problémát: a webhely a http://site.ru/ címen nyílik meg

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/ 2.7. Címtárkönyvtár eltávolítása az URL-ből

Például a site.com/directoriya/stranica.html oldalról a site.com/stranica.html oldalra történő átirányításhoz a következőket kell beírnia:

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

Vagy a második lehetőség:

RewriteCond %(DOCUMENT_ROOT)/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. A GET paraméterek átirányítása

Például irányítson át a /?act=page&id=2 oldalról a /page-2/ oldalra

RewriteCond %(QUERY_STRING) act=page RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Átirányítás az m.site.ru webhely mobil verziójára

Ebben a példában először azt a tényt ellenőrizzük, hogy a felhasználó mobileszközről nyitotta meg a webhelyet (HTTP_USER_AGENT), majd a webhely címét az m.URL-re cseréljük

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib| symbian|vezeték nélküli|nokia|kézi|mobi|telefon|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx |panasonic|sharp|wap|sch|rover|zseb|benq|java|pt|pg|vox|amoi|madár|kompal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto |iphone|android) RewriteRule ^$ http://m.%1 2.10. Átirányítás aldomainről

Például irányítsuk át a poddomen.site.ru aldomain bármely oldaláról a site.ru fődomainre

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI) 3. Egyéb példák a htaccess-szel 3.1. Az IP-cím és a böngésző megtagadása

Megtiltjuk az oldal megnyitását a 172.111.222.55 IP-című IE böngészőt használó felhasználók számára

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Egy adott fájl elutasítása

Tiltsuk le mindenkinél a disable_file.html fájlt:

tagadni mindentől 3.3. Hozzáférés engedélyezése egy IP-ről

A hozzáférés csak egy 172.111.222.55 IP-címről engedélyezett

parancs megtagadás, megtagadás engedélyezése mindentől engedélyez 172.111.222.55 3.4. Hozzáférés megtagadása különböző IP-címekről

A webhelyhez való hozzáférés megtagadása több IP-címről: 172.112.222.55, 172.113.222.55, 172.114.*.*

parancs tagadás, megtagadás engedélyezése mindentől tagadás 172.112.222.55 megtagadás 172.113.222.55 megtagadás 172.114.*.* 3.5. URL átirányítása nagy karakterekről kicsikre

Az URL-ben szereplő összes nagybetű kis betűvé alakul.

RewriteRule - RewriteRule! - Újraírási szabály ^([^A]*)A(.*)$ $1a$2 Újraírási szabály ^([^B]*)B(.*)$ $1b$2 Újraírási szabály ^([^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 Újraírási szabály ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 átírási szabály ^([^O]*)O(.*)$ $1o$2 újraírási szabály ^([^P]*)P(.*)$ $1p$2 újraírási szabály ^([^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

Nagyon fontos szempont a weboldal felállításakor. A helytelenül konfigurált átirányítás nagymértékben károsíthatja a webhely keresési eredményeit. A leggyakoribb helyzetek, amikor a Permanent Redirect 301-et kell használni:

  • A webhely címének módosítása – megvásárolta a domaint, és úgy döntött, hogy a site.example.com webhelyről a site.ru címre költözik
  • Tükrök összevonása – ha webhelye elérhető a www.site.ru és a site.ru címen, a keresőmotorok ezt két különböző webhelynek tekinthetik, ezért először el kell döntenie a főtükör (www.-val vagy anélkül), és átirányításokat kell beállítania a fő tükör.
  • Amikor egy oldal (egy vagy több) megváltoztatta a címét, egy ponton világossá vált, hogy a http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 címek nem jók, ezért http://example.com/sport/news12 címre változtatják, de kár elveszíteni pozíciókat a keresőmotor indexében (mivel ez egy új cikk lesz számukra).
  • Egy másik módszer az ismétlődő oldalak kezelésére

Fontos: ha az oldalt ideiglenesen áthelyezték, használja a 302 Ideiglenes áthelyezést. Ebben az esetben az oldalak nem egyesülnek, és az átirányítással rendelkező oldal mindig visszaállítható.

Állandó átirányítás 301 az apache számára (.htaccess)

A szabályokat közvetlenül a sorok után kell beillesztenie:

RewriteEngine a RewriteBase-en / # a teljes elérési út csonkolásához, a kiszolgáló gyökértől a webhely gyökeréig

maguk a szabályok reguláris kifejezésekkel vannak megadva; hívja elő a szintaxist:

  • Metakarakterek karaktercsoportok vagy „címkék” meghatározásához egy mintában:
    • ^ - sor kezdőjel,
    • $ - sorvégi jel,
    • ! - tagadás,
    • \ - escape perjel, lehetővé teszi, hogy az őt követő metakaraktert szabályos karakternek tekintse,
    • . - pont, bármely karaktert jelöl, de csak egyet,
    • () - csoportosítás.
  • A módosítókat normál karakterek, metakarakterek vagy csoportjaik után helyezik el:
    • ? - a szimbólum 0 vagy 1 alkalommal ismétlődik,
    • * - ismétlődik 0-tól 65536-ig,
    • + - ismétlődik 1-től 65536-ig.
  • A zászlók további opciókat határoznak meg ehhez a szabályhoz:
    • NC - (nocase) letiltja az esetek ellenőrzését.
    • Az R - (átirányítás) leállítja a konverziós folyamatot, és az eredményt visszaküldi az ügyfélböngészőnek, mint átirányítást erre az oldalra (302, MOVED TEMPORARY).
      Ezzel a jelzővel más eredménykódot is megadhat, például az R=301 301-es kódú átirányítást ad vissza (VÉGLEGESEN ELHELYEZVE). Mint érti, pontosan erre van szükségünk.
    • L - (utolsó) leállítja az átalakítási folyamatot, és az aktuális link véglegesnek minősül.

Fontolja meg a leggyakoribb helyzeteket:

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 A RewriteCond azt a feltételt jelöli, amely egyezés esetén végrehajtja a RewriteRule szabályt. Átirányítás az index.php (html) fájlról a főoldalra RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php| html |htm)$ $1 Átirányítás a webhely szerkezetének megváltoztatásakor RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 Permanent Redirect 301 PHP-ben

Ha tájékoztatni szeretné a böngészőt arról, hogy az általa kért oldalt át kell irányítani a http://site.ru címre, futtassa a következő parancsokat:

Header("HTTP/1.1 301 véglegesen áthelyezve"); header("Helyszín: http://site.ru"); kijárat();

Állandó átirányítás 301 az nginx számára

Az átirányítási szabályok leírása a szerver szakaszban található.

Átirányítás a www.site.ru webhelyről a site.ru szerverre (figyeljen 80; szerver_neve www.site.ru; újraírás ^ http://site.ru$request_uri? állandó; )

vagy általános szabály minden webhelyre:

Szerver ( szerver_neve ~^(?! www\.); ^ http://www.$host$request_uri állandó átírása; )

Átirányítás a site.ru webhelyről a www.site.ru szerverre ( figyelj 80; szerver_neve site.ru; újraírás ^ http://www.site.ru$request_uri? állandó; ) Átirányítás az index.php fájlról a főoldal helyére = / 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; tartalmazza a fastcgi_params; )

A 301 véglegesen áthelyezett állapotú HTTP-állapotkód azt jelzi, hogy a kért dokumentumot véglegesen áthelyezték a fejléc Hely mezőjében megadott új URI-ra.

Mire való?

Mindenekelőtt egy webhely domain nevének megváltoztatásakor értesíteni kell a keresőket a webhely címének változásáról. Másodszor, egyesítse a webhely nevét www-vel és anélkül. Harmadszor, a Page Rank gyors átvitele egy új webhelyre.

PHP

1. módszer

Második módszer

Perl

1. módszer

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

Második módszer

#!/usr/bin/perl -w használ szigorú; print "Állapot: 301 Véglegesen áthelyezve\n"; print "Hely: http://www.example.com/\n\n"; kijárat;

ASP.NET

1. módszer

private void Page_Load(object sender, System.EventArgs e) ( Response.Status = "301 Permanently Moved Permanently"; Response.AddHeader("Location","http://www.example.com"); )

Második módszer (4.0-s verziótól)

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

ASP Ruby on Rails def do_something headers["Status"] = "301 véglegesen áthelyezve" redirect_to "http://www.example.com/" end ColdFusion Java (JSP) Apache webszerver (.htaccess)

Első módszer (mod_alias, Redirect)

Átirányítás 301 / http://www.example.com

Második módszer (mod_alias, RedirectPermanent)

RedirectPermanent / http://www.example.com

Harmadik módszer (mod_alias, állandó átirányítás)

Állandó átirányítás / http://www.example.com

Negyedik módszer (mod_alias, RedirectMatch)

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

Ötödik módszer (mod_rewrite)

Opciók +FollowSymLinks RewriteEngine on RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1




Top