Səhifə yüklənməmişdən əvvəl PHP-də başqa URL-ə yönləndirməni necə təyin etmək olar? Euroleague men ucp php yönləndirmə

6.1K

Tutaq ki, siz https://example.com/final.php səhifəsini https://example.com/initial.php səhifəsinə daxil olan istifadəçilərə göstərmək istəyirsiniz. Bu bir neçə ilə edilə bilər PHP üsulları, JavaScript və HTML. Bu yazıda PHP-ni başqa səhifəyə yönləndirmək üçün istifadə edə biləcəyiniz üsulların hər birini əhatə edəcəyik.

Burada istifadə edəcəyimiz bir neçə dəyişən var:

URL-i yönləndirmək üçün PHP header() funksiyasından istifadə

Əgər siz initial.php-dən final.php-ə yönləndirmə əlavə etmək istəyirsinizsə, ilkin.php veb səhifəsində aşağıdakı kodu yerləşdirə bilərsiniz. Brauzerə yeni yer başlığı göndərir:

Burada yönləndirmə yaratmaq üçün PHP header() funksiyasından istifadə edirik. Bu kodu hər hansı HTML və ya mətndən əvvəl yerləşdirməlisiniz. Əks təqdirdə, başlığın artıq göndərildiyi barədə bir səhv alacaqsınız. Başlıqların göndərilməsində bu xətanın qarşısını almaq üçün çıxış buferindən də istifadə edə bilərsiniz. Aşağıdakı nümunə bu PHP yönləndirmə texnikasını işləyir:

header() funksiyasından istifadə edərək yönləndirməni yerinə yetirmək üçün ob_start() funksiyası PHP skriptində birinci funksiya olmalıdır. Bu başlıq xətalarının qarşısını alacaq.

Əlavə tədbir olaraq, veb səhifə kodunun qalan hissəsinin yerinə yetirilməməsi üçün başlığın yönləndirilməsindən dərhal sonra die() və ya exit() əlavə edə bilərsiniz. Bəzi hallarda axtarış robotları və ya brauzerlər Məkan başlığında göstərilən göstəriciyə diqqət yetirməyə bilər. Saytın təhlükəsizliyinə potensial təhlükələr hansılardır:

Aydın olmaq üçün: die() və ya exit() yönləndirmə ilə heç bir əlaqəsi yoxdur. Onlar veb-səhifədəki kodun qalan hissəsinin icrasının qarşısını almaq üçün istifadə olunur.

PHP-də səhifəyə yönləndirilərkən, Məkan başlığı dəyərini təyin edərkən mütləq URL-lərdən istifadə etmək tövsiyə olunur. Lakin nisbi URL-lər də işləyəcək. İstifadəçiləri xarici saytlara və ya veb səhifələrə yönləndirmək üçün də bu funksiyadan istifadə edə bilərsiniz.

PHP echo() funksiyasından istifadə edərək JavaScript yönləndirmə kodunun çıxarılması

Bu təmiz PHP həlli deyil. Bununla belə, bu da təsirli olur. Yönləndirməni idarə edəcək JavaScript kodunu çıxarmaq üçün PHP echo() funksiyasından istifadə edə bilərsiniz.

Bu həlli istifadə etsəniz, çıxış tamponlamadan istifadə etməli olmayacaqsınız. Bu, həmçinin başlıqların göndərilməsi ilə bağlı səhvlərin qarşısını alır.

Aşağıda istifadə edilən bəzi nümunələr verilmişdir müxtəlif üsullar Cari səhifədən digərinə yönləndirmək üçün JavaScript:

Başqa PHP saytına yönləndirmənin bu üsulunun yeganə mənfi cəhəti JavaScript-in müştəri tərəfində işləməsidir. Ziyarətçilərinizdə JavaScript deaktiv ola bilər.

Yönləndirmə üçün HTML meta teqlərindən istifadə

Yönləndirməni yerinə yetirmək üçün əsas HTML-dən də istifadə edə bilərsiniz. Bu qeyri-peşəkar görünə bilər, amma işləyir. JavaScript-in brauzerinizdə deaktiv edilməsindən və ya əvvəllər başlıq xətası göndərilməsindən narahat olmaq lazım deyil:

Siz həmçinin səhifəni hər "n" saniyədən bir avtomatik yeniləmək üçün əvvəlki misaldakı son sətirdən istifadə edə bilərsiniz. Məsələn, aşağıdakı kod səhifəni hər 8 saniyədən bir avtomatik olaraq yeniləyəcək.

Salam dostlar. Bu gün mən çox işlənmiş, lakin həmişə aktual olan bir mövzunu müzakirə etmək istərdim - bu, 301 Yönləndirmə (Permanent Redirect 301) - SEO cəmiyyətində və rəsmiyyətlər olmadan, "yönləndirmə" sözü ilə nəzərdə tutulan şey budur. Texniki cəhətdən bu, serverin sorğuya cavabıdır; bu cavabda sorğunun ünvanının daimi olaraq köçürüldüyünü göstərən 301 kodu var. Bütün bu hiyləgər hiylələr nəticəsində biz yeni bir son ünvan almalıyıq.

İnanıram ki, bu texniki aspektlərə ehtiyacınız yoxdur və buna görə də tətbiq olunan şeylər haqqında danışmaq istəyirəm - nə vaxt və hansı hallarda yönləndirmədən istifadə etmək daha yaxşıdır, yönləndirmə qaydalarını necə və hansı əmrlərlə konfiqurasiya edə bilərsiniz və s. İstiqamətləndirmələrin düzgünlüyünü yoxlaya biləcəyiniz alətləri və xidmətləri də nəzərdən keçirəcəyik.

Yazı çox uzun olduğu üçün sizin rahatlığınız üçün məzmun cədvəli hazırlamağa qərar verdim:

301 yönləndirməsini nə vaxt etməlisiniz?

Əvvəla, yönləndirmə səhifənin (bir qrup səhifə və ya bütöv bölmə) ünvanını dəyişdikdə istifadə olunur - əksər hallarda bu, saytın strukturu dəyişdirildikdə, url-nin əsas hissəsinin adı dəyişdirildikdə və ya ünvanların formalaşdırılması prinsipi dəyişdirilir (başqa sözlə, CNC). Təəssüf ki, saytda nəyisə dəyişdirəndə hamı bu barədə düşünmür və nəticədə çoxlu sayda dublikatlar yaranır ki, bu da axtarış sistemləri tərəfindən mövqelərin itirilməsinə, hətta sanksiyaların tətbiqinə səbəb olur. İşimdə belə hallarla çox tez-tez rastlaşıram və hər şeyi düzəltmək, nəticələrini neytrallaşdırmaq çox əsəb tələb edir. Öz adımdan tövsiyə edə bilərəm ki, CNC növünün dəyişdirilməsi və ya strukturun dəyişdirilməsi ilə bağlı hər hansı bir işdən əvvəl saytın hazırkı strukturunun, onun bütün bölmələrinin və son səhifələrin nümunələrinin planını tərtib edin. Bütün bunları iş başa çatdıqdan sonra yoxlamaq lazımdır ki, köhnə ünvana getdiyimiz zaman yenisinə keçək və server 301 kodu ilə (və 302 deyil) yönləndirmə verir.

301 yönləndirmələrinin növbəti ümumi istifadəsi saytın ünvanını dəyişdirmək və ya güzgüləri bir-birinə yapışdırmaqdır. Əgər siz şirkətin rebrendinqi ilə əlaqədar veb-sayt ünvanını dəyişdirmək qərarına gəlsəniz və ya çap edilmiş promosyon məhsullarında göstərmək üçün yeni, daha gözəl və daha qısa domen qeydiyyatdan keçirmisinizsə, köhnə domendəki ünvana daxil olarkən istifadəçinin eyni səhifədə bitir (onda deyil ana səhifə), lakin yeni domendə. Tanıtım saytlarına gəlincə, onlar adətən bir və ya iki səhifədən ibarətdir, keçidləri əsas sayta aparır və ya tanıtım saytına daxil olanda dərhal əsas saytdakı xüsusi səhifəyə yönləndirilirsiniz. Bəzən veb-sayt yaradarkən, məsələn, şirkət adının latın dilində qeyri-müəyyən yazılmasına görə bir neçə domen eyni anda qeydə alınır. Ünvanı intuitiv olaraq yazarkən istifadəçinin lazımi yerə çatmasını və bir neçə domenin qeydiyyatdan keçməsini təmin etmək üçün bütün “köməkçi” domenlərdən bir əsas ünvana 301 yönləndirmənin baş verməsi çox vacibdir. Heç bir halda eyni veb-sayt bütün ünvanlar üçün əlçatan olmamalıdır.

Həm də güzgülər haqqında - ola bilər ki, saytınız http://www.site.ru, http://site.ru və https://site.ru ünvanlarında mövcud olacaq (sonuncu nadirdir, lakin bu olur) - bu edilməməli olan bütün klassik səhvlərdir və onların həllində 301 yönləndirmə iştirak edir. Müxtəlif veb-sayt ünvanlarında olduğu kimi, siz əsas güzgü (www ilə və ya www olmadan) haqqında qərar verməlisiniz və əsas güzgüyə yönləndirmələr qurmalısınız. Əlbəttə ki, axtarış motorları axmaq deyil və belə vəziyyətlərdə onlar çox vaxt öz öhdəsindən gəlirlər və siz də onlara kömək edə bilərsiniz düzgün parametrlər webmaster panellərində və robots.txt-də (Yandex, Host direktivi üçün). Ancaq SEO incə məsələdir və mən şansa güvənməzdim, amma sübut edilmiş bir üsuldan istifadə edərdim!

Bəzən saytın bir nüsxəsi yalnız ünvan çubuğuna domen adını deyil, həm də serverin IP ünvanını daxil etdikdə əlçatan olduqda çox xoşagəlməz vəziyyət yaranır. Bu vəziyyətin paylaşılan hostinqdə baş verməsi ehtimalı azdır, lakin xüsusi serveriniz varsa, bu, asanlıqla baş verə bilər. Yanlış server konfiqurasiyasının səbəbi bu ola bilər - IP ünvanına daxil olan zaman girişi söndürmək problemi həll etməyə kömək edəcək, lakin burada ən yaxşı həll veb server səviyyəsində 301 yönləndirməsidir (Apache və ya Nginx). Bir neçə ay əvvəl belə bir vəziyyətlə üzləşdim - bəzi saytların asıldığı xüsusi bir serverim var idi, lakin saytlardan biri üçün başqa bir ayrı server götürmək qərarına gəldim. Saytı köçürdüm, hər şey saat kimi işləyirdi, sonra bir gün Google nəticələrində saytımın klonuna rast gəldim - şok, panik - məlum oldu ki, bu mənim yeni serverimin və təbii ki, saytımın IP ünvanıdır. onun üzərində yaşayır və əlaqə saxladıqda server 200 OK cavabını verir və Google onu tam olaraq indeksləşdirib. Əvvəlki serverdə belə problem yox idi; bu IP üçün əsas kimi göstərilən domenə İP-dən 301 yönləndirməsi əvvəlcə konfiqurasiya edilmişdi. İndi mən acı təcrübədən öyrəndim və həmişə belə şeyləri yoxlayın - xəbərdar olun və siz səhvləri təkrarlamayın. Problem nginx veb server konfiqurasiyalarına əsas domenə yönləndirmə əlavə etməklə həll edildi; Aşağıdakı yazının praktik hissəsində kodun bir nümunəsini göstərəcəyəm.

Vəziyyət əvvəlkinə bənzəyir - saytın bir nüsxəsi, məsələn, site.hosting.ru kimi bir xidmət test domeni vasitəsilə yerləşdirildikdə və əldə edilə bilər. Belə hallar mənim təcrübəmdə də olur və əvvəlki haldan fərqli olaraq bu, virtual hostinq üçün xarakterikdir. Bu niyə mövcuddur? Məsələn, siz hələ domen almamısınız və ya saytı bir hostinqdən digərinə köçürürsünüz, lakin domen üçün NS serverləri dəyişdirilməyib və ya hələ yenilənməyib. DNS qeydləri provayderdə. Belə vəziyyətlərdə edirlər test ünvanları, burada sayt ünvanını yeni hostinqə yönləndirmədən əvvəl hər şeyi konfiqurasiya edə və quraşdıra bilərsiniz. Bəzi hosterlər isə bu cür texniki ünvanlara girişi əngəlləməməklə və hətta onların indeksləşdirilməsinə qadağa qoymamaqla günah işlədirlər. Əgər sizdə bu xoşagəlməz vəziyyət varsa, o zaman .htaccess faylında texniki ünvandan əsas ünvana 301 yönləndirməsini qeydiyyatdan keçirməyə çalışmalısınız.

Və əlbəttə ki, 301 yönləndirmə müxtəlif dublikat səhifələrlə mübarizə aparmaq üçün düzgün SEO-lardan istifadə etməyi çox sevir. Niyə yalnız düzgün SEO-lar? Bəli, səhv insanlar müştərinin veb saytına daxil olduqları üçün və çox güman ki, sayta girmədən bağlantılar almağa başladılar - təəssüf ki, bu qeyri-adi deyil. Saytın optimallaşdırılmasına və təşviqinə cavabdeh olan podratçıların/işçilərin bütövlüyünü, işin nə dərəcədə yaxşı getdiyini yoxlamaq istəyən müştərilər vaxtaşırı mənə müraciət edirlər - - və indiyə qədər heç vaxt səhv və ya çatışmazlıq aşkar etməmişəm. saytlarda. Beləliklə, unutmayın - mən həmişə sizə kömək etməkdən məmnunam. Gəlin dublikatlara qayıdaq - mən inanıram ki, dublikatların indeksləşdirilməsini bloklamaq əvəzinə, əsas ünvana yönləndirmək lazımdır və bu o qədər də maraqlı deyil. Əlbəttə ki, qəbulun məcburi olduğu bir çox hal var və sonra kanonizasiya olmadan edə bilməzsiniz, ancaq yönləndirmə etmək imkanınız varsa, bunu etməyinizə əmin olun. Həmişə yoxlanılmalı olan dublikatların tez-tez halları: sonunda kəsik işarəsi olan və olmayan ünvanlar, parametrləri və etiketləri olan ünvanlar - bunu aşağıda necə həll edəcəyinizi söyləyəcəyəm.

301 yönləndirməsini nə vaxt edə bilərsiniz?

Bu bölmədə çox şey yaza bilməzsiniz, amma çalışacağam. Həqiqətən ümid edirəm ki, oxuduqdan sonra şərhlərdə mənə bir neçə fikir əlavə edəcəksiniz.

Redirect 301 404 xətası əvəzinə server cavabı kimi istifadə edilə bilər Tapılmadı– başqa sözlə, səhv linki və ya mövcud olmayan səhifəni izləyən istifadəçi “Bağışlayın, bu səhifə artıq mövcud deyil” mesajını görməyəcək, başqa mövcud səhifəyə köçürüləcək. Bu, ekspertlər arasında çox mübahisəli məqamdır və ona görə də mən öz fikrimi heç kimə təlqin etmirəm. Amma mən 404 xətası əvəzinə yönləndirmədən istifadə etməyə üstünlük verirəm və hadisələrin inkişafı üçün bir neçə variant var... Baxın, 404 xətanın 2 kateqoriyası var: birincisi klassikdir, səhifə faktiki olaraq silindikdə, ikincisi, xətanın əyri xarici keçidlərə görə görünməsidir. Birinci halda, yəqin ki, yönləndirmə etməməlisiniz, lakin 404 səhvini olduğu kimi buraxın. Ancaq ikinci halda, pozulmuş bir keçiddən bərpa oluna bilsə, düzgün url ünvanına yönləndirmə və ya əsas səhifəyə (və ya kateqoriyaya) yönləndirməyə diqqət yetirməlisiniz.

301 yönləndirməsini ETMƏYƏN zaman

İstiqamətləndirmənin sizə nə vaxt zərər verə biləcəyi haqqında bir neçə kəlmə və buna görə də aşağıdakı hallarda istifadə edilməməlidir.

Ən əsası səhv etməkdən çəkinməkdir, əgər nə etdiyinizə 100% əmin deyilsinizsə və ya nəyəsə şübhə edirsinizsə, yönləndirmələrə qarışmamalısınız. Bunu dostluq məsləhəti kimi qəbul edin :)

Daimi yönləndirmə müvəqqəti həllər üçün istifadə edilməməlidir, bu onun adından aydın görünür - müvəqqəti yerdəyişmə üçün 302 Moved Temporarily istifadə edin. Bu halda, səhifələr bir-birinə yapışdırılmayacaq və yönləndirmə ilə səhifə istənilən vaxt bərpa edilə bilər.

Domeninizlə bağlı problemlər varsa, məsələn, filtrlər, qadağalar və s. və siz saytın ünvanını (domenini) dəyişdirmək qərarına gəlsəniz, o zaman köhnə domendən yenisinə 301 yönləndirmə etməməlisiniz - nəticədə , köhnənin bütün problemlərini "yapışdıracaqsınız". Yəni, sonda heç nə dəyişməyəcək. Bəli, bir müddət köhnə domendən yeni birinə tam 301 yönləndirmədən istifadə edərək Google Penguin filtrindən çıxmaq üçün bir həll var idi. Həqiqətən də, bütün mövqelər sanksiyalardan əvvəlki səviyyəyə qaytarıldı və bu, pis Pinqvin üçün dərdə bir dərman kimi görünürdü, lakin alqoritmin növbəti yeniləməsi ilə bu xüsusiyyət nəzərə alındı ​​və yeni domen də filtrin altına düşdü, nəticədə domen dəyişikliyindən sonra heç nə yaxşılaşmadı. Əgər siz artıq domeni dəyişdirmək qərarına gəlmisinizsə, onda siz bütün məzmunu yeni domenə köçürməyə cəhd edə bilərsiniz və onu köhnə domendən silə və köçürmə ilə bağlı mesajla stub qoya və ya daha yaxşısı hər şeyi yenidən başlaya bilərsiniz. sıfırdan.

301 yönləndirməsini etmək üçün bir çox yol var: htaccess, php, javascript, server parametrləri və s. vasitəsilə - buna görə də bütün üsulları birdən istifadə etməyə çalışmamalısınız, ikisi arasında "anlaşılmazlıq" ehtimalı. fərqli yollar və siz, məsələn, sonsuz tsiklik yönləndirmə əldə edə bilərsiniz.

Mürəkkəb bir sayt strukturu ilə işləyərkən və ya böyük portalı yenidən dizayn edərkən, çoxlu yönləndirmələr və ya uzun zəncirlər tez-tez baş verir. Bu o deməkdir ki, yönləndirmə bir addımda deyil, iki və ya daha çox mərhələdə baş verir - bu pis bir vəziyyətdir və mümkünsə qarşısını almaq lazımdır. Bu linkə tıkladığınız zaman axtarış robotu, ard-arda bir neçə yönləndirmə aldıqdan sonra aldadıldığını düşünə bilər və daha çox izləməyi dayandırır və linkləri tamamilə nəzərə almağı dayandırır. Təcrübəmdən bir nümunə: bir dəfə belə bir gözlənilməz zəncirlə audit üçün bir sayta rast gəldim:

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

Və sonda 404 səhv verməli olan http://www.site.ru/404.php səhifəsi 200 OK cavabını verir. Bu, hətta ağlımı da qarışdırdı, amma bir axtarış robotunun belə bir karuselə girsə nə düşünəcəyini təsəvvür edin! Zəncirdə təkcə üç fərqli domen iştirak etmədi, həm də səhv səhifəsində bunun səhv olmadığını və indeksləşdirilməsi lazım olduğunu söylədi.

Mümkünsə, sayt daxilində yönləndirmələrin olmamasına çalışın - əgər sayta xarici keçidlər düzəldilə bilmirsə və yönləndirmə qaçılmazdırsa, daxili bağlantılar düzəldilməlidir. Bu, indeksləşdirmə və sıralama keyfiyyətinə təsir göstərməyə bilər, lakin əmin ola bilməzsiniz və buna görə də bu cür mübahisəli vəziyyətlərdən qaçmaq daha yaxşıdır. Möhtəşəm biri daxili yönləndirmələri və ümumiyyətlə saytdakı səhvləri izləməkdə sizə kömək edəcəkdir.

.htaccess-də yönləndirmə qaydaları yaratarkən, serverdəki qovluqların və faylların real ünvanlarını istisna edin və seçimə nəzarət edin. Bir dəfə yoxlamadan keçdiyim bir sayt üçün vəziyyət belə idi ki, sonunda kəsik işarəsi olan və olmayan dublikat kateqoriyalı səhifələrə qarşı mübarizədə vebmaster bunu bir az aşdı və əksinə, problemi daha da ağırlaşdırdı. Yenidən yazma qaydaları nəinki real js skriptlərinə və css stil fayllarına təsir edərək onların düzgün işləməsini dayandırdı, həm də bəzi səhifələr sonunda lazımsız slash aldı və dublikatlar meydana çıxdı. Dostlar, yaratdığınız qaydaların yalnız işlədiyiniz ünvanlar qrupuna aid olmasını diqqətlə təmin edin və digərlərini məhdudlaşdırın.

Qurtulmanız lazım olan problemli səhifələri və onların ünvanlarını axtarmaq üçün Yandex və Google-dan vebmaster panellərinin imkanlarından istifadə edin. Yandex Webmaster üçün: Sayt seçin -> Saytın indeksləşdirilməsi -> İstisna edilən səhifələr. Google Webmaster üçün: Sayt seçin -> Optimallaşdırma -> HTML Optimizasiyası; Həmçinin: Saytı seçin -> Konfiqurasiya -> URL parametrləri.

Yandex və Google-da yönləndirmələrin indeksləşdirilməsi və yenidən indeksləşdirilməsi xüsusiyyətləri. Dublikatlar və problemli ünvanlarla mübarizə apardığınız zaman, əlbəttə ki, vebmasterin panellərindən xətaların silinməsini gözləyəcəksiniz; burada bəzi xüsusiyyətlər var. Google ilə hər şey sadədir - yönləndirmələri quraşdırırsınız, dəyişikliklər 2 həftə ərzində indeksləşdiriləcək, eyni zamanda səhvlər veb ustasının panelindən yox olmağa başlayacaq, adətən bir aydan sonra bütün səhvlər yox olur. Yandex ilə bir incəlik var və bu belədir: yönləndirmələri qurduqdan sonra paneldən səhvlərin yox olmasını əbədi olaraq gözləyə bilərsiniz.Bir dəfə dəstəyə yazana qədər altı ay gözlədim, orada mənə bildirdilər ki, əlavə olaraq yönləndirmə üçün robots.txt-də problemli səhifələri əlavə olaraq bağlamaq lazımdır və yalnız bundan sonra vebmaster panelindən yox olacaqlar.

.htaccess vasitəsilə Daimi Yönləndirmə 301

İstiqamətləndirmələrin quraşdırılmasının bu üsulu ən populyar və sadədir. Baxmayaraq ki, etiraf edim ki, hər şey göründüyü qədər sadə deyil, ona görə də htaccess haqqında ayrıca yazı yazmağı planlaşdırıram. Müsbət tərəfdə bu üsul Qeyd etmək olar ki, yönləndirmə server səviyyəsində və hər hansı sayt skriptlərinin işlənməsi başlamazdan əvvəl işə salınır və heç bir əlavə yük daşımır.

Yəqin ki, serverinizdə artıq .htaccess faylı var (əsas index.php-nin olduğu kökdə). Bu fayl görünmürsə:

  • Ftp menecerinin parametrlərini yoxlayın, o, htaccess faylı olan sistemləri və faylları gizlədə bilər
  • Getmək fayl idarəedici hosterin idarəetmə panelindən keçin və fayl üçün icazələri yoxlayın. Mən CHMOD-u nəzərdə tutmuram, məsələn, bir qrup və istifadəçi ola bilər kök istifadəçi, və siz domen sahibinin istifadəçi girişindən istifadə edərək ftp vasitəsilə qoşulursunuz.
  • Fayl sadəcə mövcud olmaya bilər :) Sonra yaradılmalıdır, lakin Windows altında bəzən problem yaranır, çünki əslində .htaccess faylı sistem tərəfindən adı olmayan və yalnız uzantılı fayl kimi görünür. Mən sadə bir yol təklif edirəm - adi txt faylı yaradın, ona “RewriteEngine On” (dırnaq işarələri olmadan) sətri əlavə edin, txt faylını serverə yükləyin, faylın adını serverdə .htaccess olaraq dəyişdirin.

Yönləndirmə ilə bağlı redaktələrin əksəriyyəti faylın ən əvvəlində “RewriteEngine On” sətirindən sonra yazılmalıdır ki, bu qaydalar əvvəlcə işlənsin. Hərəkətlərin ardıcıllığına riayət etmək vacibdir, çünki əmrlər server tərəfindən əvvəldən ilk hadisəyə qədər sətir-sətir işlənir. Başqa sözlə, həmişə müəyyən bir nümunə ilə başlamalı və daha ümumi bir nümunə ilə bitirməlisiniz.

Ən ümumi və faydalı nümunələrdən bəzilərinə baxaq:

301 domen üçün www.site.ru-dan site.ru-ya yönləndirmə

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

Yuxarıdakı yönləndirmə seçimləri əla işləyir və sizin tərəfinizdən heç bir dəyişiklik tələb etmir - sadəcə olaraq faylı .htaccess faylına daxil edin. Bununla belə, 100% təhlükəsiz olmaq üçün sizə başqa variantı məsləhət görərdim:

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

Birincisi www ilə əsas domeni olanlar üçün, ikincisi isə www olmayanlar üçündür. Müvafiq olaraq, hər iki nümunədə “sayt” əvəzinə domeninizin adını daxil etməlisiniz.
Yaxşı, niyə bu seçimlər daha yaxşıdır? Çox sadədir, onlar domen adında yalnız www-in olmamasını/olmadığını yox, həm də domen adının tam uyğunluğunu yoxlayırlar.
Canlı misal: Şübhəsiz ki, siz gözlənilmədən saytın hostinqdəki xidmət ünvanı (belə ünvan sayta real domeninizi bağlamazdan əvvəl daxil olmaq üçün verilir), bəzi güzgü və ya hətta IP ilə indeksləşdirilə bilməsi faktı ilə qarşılaşmısınız. ünvan! Beləliklə, universal qaydalar yalnız www-in yoxluğunu/varlığını yoxlayacaq və istifadəçinin və ya axtarış robotunun hansı domenə daxil olmasının əhəmiyyəti yoxdur.
Beləliklə, qabaqcıl seçimdən istifadə etməklə saytınızın yalnız və yalnız şəxsən göstərdiyiniz domen adından istifadə etməklə və www nəzərə alınmaqla əlçatan olacağına 146% əmin olacaqsınız. Mən yalnız bu seçimdən istifadə edirəm və onu sizə tövsiyə edirəm!

301 http-dən https-ə yönləndirmə

Saytların təhlükəsiz protokola kütləvi keçid işığında, http-dən https-ə necə yönləndirməyi bilməlisiniz. Yeri gəlmişkən, əgər hələ də SSL sertifikatı seçməmisinizsə, haqqında yazımı oxumalısınız.

Aşağıda mən sizə http-dən https protokoluna 301 yönləndirmə üçün bir neçə variant təklif edirəm ki, bu da serverinizin konfiqurasiyasından asılı olaraq işləyə və ya olmaya bilər, lakin qaydalardan biri mütləq sizə uyğun olacaq:

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

RewriteCond %(HTTPS) !=RewriteRule-də ^(.*)$ 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) !RewriteRule-də ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !RewriteRule-də ^(.*)$ 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) off RewriteCond %(HTTP:X-Forwarded-Proto) !https RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

Https-dən http protokoluna yönləndirin (düzünü desəm, bunun sizə nə üçün lazım ola biləcəyini bilmirəm):

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

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

Bu yaxınlarda çox yazdım ətraflı təlimatlar. Https-dən https-ə keçməyi planlaşdırırsınızsa, onu oxumağı özünüzə borc bilirsiniz!

Mən başa düşülməz gobbledygook-a bir az aydınlıq gətirəcəyəm:

  • RewriteCond, uyğun gələrsə, RewriteRule-u yerinə yetirəcək bir şərti bildirir. İstifadə etməklə müntəzəm ifadələr sətir nümunələri müəyyən edilir.
  • Server Dəyişənləri:
    • %(REQUEST_URI) - domen adı və GET parametrləri olmayan URL hissəsi, məsələn, hazırda oxuduğunuz səhifə üçün: blog/post/4393,
    • %(HTTP_HOST) - host və ya Domen adı məsələn: vebsayt
    • %(QUERY_STRING) - GET parametrləri dəsti olan sətir, yəni URL-in sual işarəsindən sonrakı hissəsi (və əgər varsa, anker şəbəkəsindən əvvəl).
    • %(REQUEST_FILENAME) — tam yol V fayl sistemi serveri bu sorğuya uyğun bir fayla və ya skriptə..php, lakin server fayl sistemində bu dəhşətli xəttdir /var/www/site/data/www/site/index.php.
      Belə olur ki, yönləndirmə edərkən gözlənilməz nəticə əldə edirsiniz, məsələn, http://site.ru/page-name?post=17434801_4060 ünvanında post=17434801_4060 parametrlərini silmək istəyirsiniz, müvafiq qaydaları göstərmiş ( onlar haqqında aşağıda yazılacaq), amma sonunda http://site.ru/usr/local/www/site.ru/www/page-name xəttini aldıq - parametrlərdən xilas olduq, lakin qəribə ünvan. Bütün bunlar ona görədir ki, siz RewriteEngine On-dan sonra faylın əvvəlində kataloq kontekstində transformasiyalar üçün xüsusi, əsas URL təyin edən RewriteBase / direktivini təyin etməmisiniz.
  • Metaxarakterlər bir nümunədə simvol qruplarını və ya "teqləri" müəyyən etmək üçün istifadə olunur:
    • ^ — xətt başlanğıc işarəsi,
    • $ xəttin sonu işarəsidir,
    • ! - inkar,
    • \ - escape slash, ondan sonrakı metaxarakteri adi simvol kimi nəzərdən keçirməyə imkan verir,
    • . - nöqtə, hər hansı bir simvolu ifadə edir, ancaq bir,
    • () – qruplaşdırma.
  • Modifikatorlar adi simvollardan, metaxarakterlərdən və ya onların qruplarından sonra yerləşdirilir və şablonlardan istifadə imkanlarını genişləndirir:
    • ? — simvol 0 və ya 1 dəfə təkrarlanır,
    • * — 0-dan 65536 dəfə təkrarlanır,
    • + — 1-dən 65536-a qədər təkrarlanır.
  • Bayraqlar bu qayda üçün əlavə seçimləri müəyyənləşdirir və siyahıda verilmişdir kvadrat mötərizələr vergüllə ayrılır:
    • NC - (nocase) işin yoxlanılmasını söndürür.
    • R - (yönləndirmə) çevrilmə prosesini dayandırır və nəticəni yönləndirmə kimi müştəri brauzerinə qaytarır. bu səhifə(302, MÜVƏQİQƏTLİ KÖÇÜNÜB). Bu bayraqla siz fərqli bir nəticə kodu təyin edə bilərsiniz, məsələn, R=301 301 kodu ilə yönləndirməni qaytaracaq (DAİMİ KÖŞÜNDÜ). Anladığınız kimi, məhz bu bizə lazımdır.
    • L - (son) çevrilmə prosesini dayandırır və cari keçid yekun hesab olunur.

Ən məşhur hal index.php (html) saytından əsas səhifəyə 301 yönləndirməsidir. Saytların 90% -də http://site.ru və http://site.ru/index.php (və ya index.html, index.htm və ya hər hansı digər seçim) ünvanlarında əsas səhifənin təkrarlanması problemi var. , fərqi yoxdur, hətta hamısı birdən). Haradasa, bu, məsələn, loqodan olan bir keçid site.ru-ya, menyudakı bir keçid isə site.ru/index.php-ə gedəndə, daxil olan zaman dublikat aşkar edildikdə, açıq-aydın görünür. ünvanı index.php-dən əl ilə. Problemi sadəcə həll etmək vacibdir. Mən universal bir seçim təklif edirəm, budur:

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

Sadəcə bu kodu dəyişmədən "RewriteEngine On" sətirindən sonra sətirdən sonra yapışdırın və problem yoxdur!

Saytda dublikatlarla mübarizə aparmağa başlayanların çoxu təəccüblənir ki, http://site.ru/page-name.html&post=-1234567_8901 əsas səhifəsini təkrarlayan bu cür bağlantılar haradan gəlir? &post=-1234567_8901 prefiksi haradan gəldi - bu "yaxşı" VKontakte-dən götürülmüşdür, kimsə öz divarında, qrupda və ya ictimaiyyətdə saytınıza bir keçid paylaşdıqda, bəzi statistikaları izləmək üçün oxşar bir xətt avtomatik olaraq əlavə olunur. .

Bu cəfəngiyyatdan birdəfəlik xilas olmaq üçün htaccess-ə əlavə etməlisiniz:

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

Gördüyünüz kimi, bu və əvvəlki hal arasında heç bir fərq yoxdur, hətta url-də &post= və ya &sa= və ya hər nə varsa, həll yolu eynidir, sadəcə kodun aşkar hissələrini dəyişdirmək lazımdır. aydın, hə?

Ünvandakı parametrlərdən və ya etiketlərdən qurtulmaq

Sual şərhlərdə və forumda dəfələrlə verildi, buna görə də diqqətdən kənarda qala bilməz. Belə dublikatlarla nə etməli: http://site.ru/?abrakadabra və ya daha real bir hal http://site.ru?utm_source=twitterfeed&utm_medium=twitter

Bu hal PHP skripti üçün parametrlərdən qurtulacağımız növbəti nöqtədən bir qədər fərqlidir, çünki burada adi ünvan və parametrləri skriptə ötürmürük. Həll yolu budur:

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

%(QUERY_STRING) PHP üçün dəyişənlər dəsti olan sətirdir, URL-nin sual işarəsindən sonrakı hissəsi (və əgər varsa, anker hashından əvvəl).

Zəng url - http://site.ru/index.php?lang=ru

RewriteCond %(QUERY_STRING) ^lang=ru $
Tələb olunan url bu qaydaya aiddir, başqa qaydalar yoxdur, ona görə də RewriteRule aşağıdakı sətirdə yerinə yetiriləcək.
RewriteRule ^(.*) \.php\?(.*) $1 \.php

Mənbə url: http://site.ru/index .php?lang=ru
URL təhlil şablonu: ^(.*) \.php\?(.*) $
URL dəyişənlərə bölünəcək: $1 = http://site.ru/index, $2 = lang=ru və http://site.ru/index .php ($1 \.php) şəklində yenidən yığılacaq.
Və sonra yeni url-ə 301 yönləndirmə olacaq.

Saytın strukturunu dəyişdirərkən qaydalara nümunə

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

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

Bloqumun strukturunu dəyişdirəndə htaccess faylına əlavə etməli olduğum sətirlər bunlardır.

Əvvəllər mənim aşağıdakı ünvanlarım var idi: https://site/post/4358 və https://site/post/category/seo, hansısa şəkildə strukturda məntiqi pozdu - axı bloq saytın yalnız bir hissəsidir. , amma nədənsə yazılar bloqa deyil sayta, kateqoriyalar isə yazılara aiddir ki, bu da tamamilə məntiqsizdir..info/blog/category/seo - indi bloq saytın ayrıca bölməsidir, və yazılar ona, kateqoriyalar isə yazılara deyil, bloqa aiddir.

Eyni nümunədən aydın olur ki, qaydalar ardıcıllığına riayət etmək vacibdir. Sətirləri dəyişdirsəm, yəni RewriteRule ^post/(..info/blog/post/category/seo sətri https://site/blog/category/seo-da olması lazım olduğu kimi deyil, önə gələcəkdi.

Və son nümunə, server kökündən ünvanla ümumi bir səhvin təhlilidir

Məsələn, kateqoriya səhifəsi http://site.ru/razdel/podrazdel/index.php və http://site.ru/razdel/podrazdel/ iki ünvanda olduqda problemi həll etmək qərarına gəldiniz. İkinci url düzgün və əsasdır, sonunda index.php olan url isə atılmalı olan tam dublikatdır.

index.php-dən kateqoriyaya yönləndirmək üçün aşağıdakı qaydanı yazırsınız:

RewriteBase-də RewriteEngine /

301 səhifədən səhifəyə yeni ünvana yönləndirmə

Ən sadə hal, bir səhifəni başqa bir ünvana yönləndirməli olduğunuz zamandır. Bir neçə səhifə üçün yönləndirmə etmək lazımdırsa, bir neçə qayda yazmalı olacaqsınız, lakin bu halda yuxarıda təsvir olunan şablonlardan istifadə etmək daha yaxşıdır. Bir neçə tamamilə eyni sintaksis variantları var:

Yönləndirmə 301 /page-name1.html http://site.ru/page-name2.html Daimi yönləndirmə /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Yönləndirmə 301 /page-name1.html http://site.ru/page-name2.html Daimi yönləndirmə /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Üçdən birini seçin, amma şəxsən mən birinci varianta üstünlük verirəm - daha qısa, daha sadə və daha başa düşüləndir. Yeri gəlmişkən, burada site.ru mütləq eyni domen deyil, başqa hər hansı bir domen ola bilər.

.htaccess ilə bitirək və PHP-ə keçək.

PHP istifadə edərək Daimi Yönləndirmə 301

Mən adətən .htaccess ilə çətinliklər yarandıqda və ya PHP funksiyasının daha məntiqli və başa düşülən olduğu ortaya çıxanda PHP yönləndirməsindən istifadə edirəm.

php-də 301 yönləndirmənin sintaksisi belə görünür:

başlıq(); başlıq("Yer: http://site.ru"); öl ("Yönləndirmə");

başlıq("HTTP/1.1 301 Daimi köçürüldü"); başlıq("Yer: http://site.ru"); öl ("Yönləndirmə");

Bu sətirlər müştərinin brauzerinə tələb olunan bəzi səhifədən daimi olaraq http://site.ru ünvanına yönləndirmək lazım olduğunu bildirir. Bu halda, http://site.ru yalnız cari saytın əsas səhifəsinin ünvanı ola bilməz, həm də hər hansı digər sayt ola bilər. Bir şey səhv olarsa və səhv baş verərsə, brauzer pəncərəsində "Yönləndirmə" yazısını görəcəyik.

Bunu daha aydın etmək üçün, bəzi problemləri həll etməyə çalışaraq blog saytım üçün yazdığım bir neçə funksiya nümunəsi var.

URL-dən müəyyən bir hissəni silməyə imkan verən funksiya

əgər (strpos($_SERVER["REQUEST_URI" ], "http://site" ) !== false) ( $real_page_url = "http://site" .str_replace ("/http://site" , "" , $_SERVER["REQUEST_URI" ]); başlıq ("HTTP/1.1 301 Daimi köçürüldü" ); başlıq ("Yer: $real_page_url" ); die("Yönləndirmə" ); )

if (strpos($_SERVER["REQUEST_URI"], "http://site") !== false) ( $real_page_url = "http://site"..1 301 Daimi köçürülüb"); header("Yer: $real_page_url"); die("Yönləndirmə"); )

Bir dəfə vebmaster panelində bir dəstə 404 səhvin görünməsi ilə bağlı problemim var idi, bu səhifələrin ünvanları https://alaev..e kimi idi. Ünvanın bir yerindən dublikat sayt ünvanı peyda oldu. Və sonra mən bir funksiya yazdım ki, URI-də (qeyd, URL deyil, URI) “http://site” girişi olub-olmadığını yoxlayır və əgər varsa, biz bu parçanı ünvandan kəsib nəticəni yazırıq. $real_page_url dəyişəninə, sonra isə dəyişəndən düzgün ünvana 301 yönləndirməsi edirik.

URL-dən arxadakı slashi aradan qaldıran funksiya

əgər (($_SERVER["REQUEST_URI" ], - 1 , 1 ) == "/" ) ( $requested_url = rtrim($requested_url, "/" ); başlıq ("HTTP/1.0 301 Daimi köçürülüb"); başlıq ( "Məkan: $requested_url" ); die("Yönləndirmə" ); )

əgər (($_SERVER["REQUEST_URI"], - 1, 1) == "/") ( $requested_url = rtrim($requested_url, "/"); header("HTTP/1.0 301 Daimi köçürülüb"); başlıq( "Məkan: $requested_url"); die("Yönləndirmə"); )

Budur, səhifənin tələb olunan ünvanının sonunda kəsik işarəsi olub-olmadığını yoxlayan ən sadə funksiya, əgər varsa, slash kəsilir və 301 yönləndirməsi kəsiksiz ünvana baş verir.

ASP, Ruby on Rail və s. kimi müxtəlif proqramlaşdırma dillərində yönləndirmə əmri verməyə imkan verən daha çox variant var, lakin mən bu dillərlə tanış deyiləm, ona görə də burada ağıllı olub sizi aldatmayacağam. . İstiqamətləndirmələr meta yeniləmə meta teqindən, həmçinin javascript-ə yönləndirmələrdən istifadə etməklə də mümkündür - lakin bu, vicdansız qapı tərtibatçılarının taleyidir və axtarış motorları bu yönləndirmələri başa düşmür; onlar serverdən 200 OK cavabı alırlar. Ona görə də biz bu variantları nəzərdən keçirmirik.

Nginx serveri üçün Permanent Redirect 301

Saytımın IP vasitəsilə əldə edilə bilən güzgüsü haqqında yazdığımı xatırlayırsınız? Nəticədə, problem adətən burada /etc/nginx/nginx.conf olan server konfiqurasiya faylında yazılmış yönləndirmə ilə həll edildi. Orada aşağıdakı sətirlər yazılmışdı:

server ( 1.2.34.123:80 default; server_name _; yenidən yaz ^/(.*)$ http://site.ru/$1 daimi; )

server ( 1.2.34.123:80 default; server_name _; yenidən yaz ^/(.*)$ http://site.ru/$1 daimi; )

Burada deyilir ki, əgər IP ünvanına 80-ci port vasitəsilə daxil olursunuzsa, o zaman site.ru saytına daimi yönləndirmə etmək lazımdır.

Bununla belə, texniki dəstək bunu mənə aşağıdakı sözlərlə etməyi tövsiyə etmədi: “HTTP serverini elə konfiqurasiya etmək daha düzgün olardı ki, əgər o, protokolda açıq şəkildə göstərilməyən ünvandan daxil olarsa, sadəcə əlaqəni bağlayır. HTTP server konfiqurasiyası, bu server resursları üçün ən etibarlı, sadə, təhlükəsiz və ən az tələbkar seçimdir. Bir müddət sonra artıq əlçatan olmayan səhifələr axtarış motoru indeksindən çıxarılacaq.”

Növbəti məsləhət belə idi: “Yönləndirmə əvəzinə sadəcə əlaqəni bağlamaq lazım olduqda, xəttin əvəzinə “yenidən yaz ^/(.*)$ http://site.ru/$1 daimi;” yazın. belə bir xətt "qaytar 444;". Sonra işə salın: "invoke-rc.d nginx reload"".

Bəlkə bu kiməsə kömək edəcək.

Ən ümumi hallarda yönləndirmə nümunələri

www.site.ru domeni üçün site.ru saytına yönləndirin

server (qulaq asmaq 80; server_name site.ru; yenidən yazın ^ http://www.site.ru$request_uri? daimi; )

http://site.ru/index.php ünvanından http://site.ru/ ünvanına yönləndirin

yer = /index.php (əgər ($request_uri = /index.php) (yenidən yazmaq ^ http://$host? daimi;#301 yönləndirmə) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_params daxil edin; )

yer = /index.php (əgər ($request_uri = /index.php) (yenidən yazmaq ^ http://$host? daimi;#301 yönləndirmə) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_params daxil edin; )

Belə bir şey. Mən nginx üçün konfiqurasiya qurmaqda yaxşı deyiləm; Mən həmişə Apache parametrləri ilə məşğulam, ona görə də nginx haqqında hər hansı sualınız varsa, çətin ki, sizə kömək edə biləcəm...

HTTP başlıqlarını və server cavab statuslarını necə yoxlamaq olar

Bu bölmədə mən serverin cavabını yoxlamaq üçün müxtəlif xidmətləri və plaginləri təsvir etmək istədim, lakin başa düşürəm ki, bu yazı artıq o qədər böyükdür ki, özümü yalnız genişlənmələrə keçidlərlə məhdudlaşdırmalı olacağam. Chrome brauzerləri və Firefox.

Firefox üçün HttpFox əlavəsi

HttpFox (burada addona keçid var) mənim sevimli http başlıq izləmə vasitəsidir. HttpFox, məsələn, yönləndirmə zəncirlərini və ümumiyyətlə, səhifənin yüklənməsinin ardıcıllığını və sürətini izləməyə imkan verən sətir-sətir səhifə yüklənməsinin gedişatını göstərir. Əgər Mozilla istifadə edirsinizsə, onu mütləq tövsiyə edirəm.

Chrome üçün HTTP Başlıqları Uzantısı

Mən özüm HTTP Headers uzantısından istifadə etmirəm (burada ona bir keçid var), amma İnternet mənə buna diqqət yetirməyi tövsiyə etdi. Daha yaxşı seçimləriniz varsa, şərhlərdə yazın.

Dəhşətli uzun və darıxdırıcı yazımı bununla bitirirəm, dostlar.
Sona qədər oxuduğunuz üçün təşəkkür edirəm, ümid edirəm ki, həqiqətən faydalı tapdınız.

.htaccess konfiqurasiya faylı Apache veb serverləri üçün konfiqurasiyadır. Əksər hosting saytları bu server vasitəsilə işləyir, ona görə də hər bir saytda bu fayl var. Veb ustaları öz dəyişiklikləri etməklə onun işinə qismən nəzarət edə bilərlər. Bu yazıda biz serverin işində dəyişdirilə bilən direktivlərə və qaydalara baxacağıq.

Ən vacib .htaccess faylı saytın kökündə yerləşir:

Onun hərəkətləri cari kataloqa və bütün alt kataloqlara aiddir. Bunlar. Sayt sahiblərinin bütün serverin işinə müdaxilə etmədən yalnız öz layihəsinin işinə təsir etmək imkanı var. Əgər bu fayl yoxdursa, o, istənilən notepaddan istifadə etməklə yaradıla bilər. Əsas odur ki, fayl adı ".htaccess" olmalıdır - .txt, .doc və s. formatları olmadan.

301 yönləndirmələri ən çox server səviyyəsində .htaccess faylı vasitəsilə konfiqurasiya edilir ki, bu da keçid prosesini xeyli sürətləndirir. yeni səhifə, çünki ara səhifə yükləməyə ehtiyac yoxdur. O, həmçinin 404 səhvini hansı faylın işlədiyini müəyyənləşdirir.

Aşağıda .htaccess vasitəsilə yönləndirmələrin bütün ümumi variantlarını nəzərdən keçirəcəyik və əvvəlcə seçimlər və qaydalarla tanış olacağıq.

İstiqamətləndirmələrlə işləyə bilmək üçün siz ReWriteEngine modulunu aktivləşdirməlisiniz. Bunu etmək üçün iki sətir kod yazmalısınız (tercihen .htaccess faylının ən yuxarı hissəsində):

Seçimlər +FollowSymLinks RewriteEngine Aktivdir

Mod_write modul direktivləri ilə işləyə bilmək üçün bu sətirləri .htaccess faylınızın ən yuxarı hissəsinə qoyun.

Həmçinin, mod_alias modulları hostinqdə aktivləşdirilməlidir (Redirect, RedirectPermanent və RedirectMatch-i dəstəkləmək üçün).

1. Yönləndirmə, RewriteRule və RewriteCond qaydaları 1.1. İstiqamətləndirmə direktivi

Yönləndirmə sintaksisi:

Yönləndirmə / http://to_full_address

Yönləndirmə bir səhifədən digərinə birbaşa yönləndirmə təyin edir.

Yönləndirmə kodu statusda yazılır. İsteğe bağlı parametrdir. Çox vaxt 301 yazır, bu da səhifə ünvanının daimi dəyişməsini bildirir.

“Kimdən” səhifəsinin tam sayt ünvanı göstərilmədən, lakin “/” xətti ilə (yəni saytın kökündən) başlayan tam nisbi URL göstərilməklə formatda yazılması vacibdir. Yönləndirmənin getdiyi səhifə tam şəkildə yazılmalıdır, yəni. mütləq URL səhifə ünvanı (yəni domen adı və http və ya https protokolu ilə).

Misal üçün

Yönləndirmə 301 /oldpage.php http://site/newpage.php

Başqa cür də yaza bilərsiniz

RedirectPermanent 301 /oldpage.php http://site/newpage.php və ya Yönləndirmə daimi 301 /oldpage.php http://site/newpage.php 1.2. RewriteRule direktivi

RewriteRule direktivi keçid qaydalarını təyin edir. Sintaksis aşağıdakı kimidir:

RewriteRule Pattern Dəyişdirmə [kodlar]
  • Xarici yönləndirmə baş verdikdə, brauzer xəttindəki URL dəyişir - " "
  • Daxili ilə - brauzer xəttindəki URL-i dəyişmir - " " və ya "[L] "
1.3. RewriteCond direktivi

RewriteCond direktivi RewriteRule-dəki qaydaların yerinə yetirildiyi şərtləri müəyyən edir.

RewriteCond Comparison_String Condition

Məsələn, bu şərtlər istifadəçinin brauzeri, IP ünvanı, başlığı və s. ola bilər.

1.4. RedirectMatch direktivi

RedirectMatch direktivi Redirect-ə bənzəyir, yeganə fərq odur ki, o, müntəzəm ifadələr yazmağa imkan verir.

RedirectMatch From Harada 2. .htaccess-də 301 yönləndirmə nümunələri

Artıq məqalələrdə .htaccess yönləndirməsi ilə bir çox nümunəyə baxmışıq:

  • Veb sayt ünvanının dəyişdirilməsi - köhnə domendən yenisinə yönləndirmə

Burada hələ mövcud olmayan yönləndirmələr üçün seçimlər əlavə edəcəyik.

2.1. Bir səhifədən digərinə yönləndirin

site.ru/cat/oldpage saytından site.ru/newpage.html saytına yönləndirin

RewriteRule ^cat/oldpage.* /newpage.html

Və ya ikinci seçim:

Yönləndirmə 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Bütün .htm fayllarından .html RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html-ə yönləndirin

Və ya ikinci seçim:

RewriteRule ^(.*)\.htm$ $1.html 2.3. Bütün kataloqu başqa bir səhifəyə yönləndirin

/old/ kataloq və alt kataloqlardakı istənilən səhifə /new.php-ə yönləndiriləcək

RewriteRule ^old(.*)$ /new.php 2.4. URL-dən əlavə xətlərin çıxarılması

Məsələn, /catalog///stranica.html səhifəsi əlçatandır və açılır. Bu vəziyyətdən qaçmaq və sonsuz sayda dublikat yaratmamaq üçün aşağıdakı yönləndirməni yazmalısınız

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. İstiqamətləndirmədən yenidən yazın

Siz səhifənin URL-ni dəyişmədən başqa səhifə yükləyə bilərsiniz. Məsələn, /news.html səhifəsini yükləyək və ünvan çubuğunda /news/happy ünvanı görünəcək.

RewriteRule ^news/happy.* /news.html [L] 2.6. Əsas səhifə ünvanının sonuna arxa xətt əlavə etmək

Məsələn, bir çox server elə işləyir ki, URL-də sonuncu slash yazılmır. Məsələn, http://site.ru. Aşağıdakı kod bu problemi həll edir: sayt http://site.ru/ ünvanında açılacaq.

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/ 2.7. Kataloq kataloqu URL-dən silinir

Məsələn, site.com/directoriya/stranica.html səhifəsindən site.com/stranica.html səhifəsinə yönləndirmək üçün aşağıdakıları daxil etməlisiniz:

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

Və ya ikinci seçim:

RewriteCond %(DOCUMENT_ROOT)/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. GET parametrlərini yönləndirin

Məsələn, /?act=page&id=2 səhifəsindən /page-2/ səhifəsinə yönləndirin.

RewriteCond %(QUERY_STRING) akt=səhifə RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /səhifə/%1/? ] 2.9. yönləndirin mobil versiya m.site.ru saytı

Bu nümunədə əvvəlcə istifadəçinin saytı açdığını yoxlayırıq mobil cihaz(HTTP_USER_AGENT), sonra sayt ünvanı m.URL ilə əvəz olunur

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib| symbian|simsiz|nokia|əl|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|cib|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. Subdomendən yönləndirmə

Məsələn, poddomen.site.ru alt domeninin istənilən səhifəsindən site.ru əsas domeninə yönləndirək.

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI) 3. Htaccess ilə digər nümunələr 3.1. IP ünvanını və brauzeri rədd edin

172.111.222.55 IP ünvanı olan IE brauzerindən istifadə edən istifadəçi üçün saytın açılmasını qadağan edəcəyik.

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Müəyyən bir faylı rədd edin

Disable_file.html faylını hər kəs üçün deaktiv edək:

bütün 3.3-dən imtina edin. Bir IP-dən girişə icazə verin

Girişə yalnız bir IP ünvanından icazə veriləcək 172.111.222.55

172.111.222.55-dən sifariş rədd et, hamıdan rədd et icazə ver 3.4. Müxtəlif IP-lərdən girişi rədd edin

172.112.222.55, 172.113.222.55, 172.114.* bir neçə IP ünvanından sayta girişi rədd edin.*

inkar əmri verin, hamıdan inkar edin 172.112.222.55-dən rədd edin 172.113.222.55-dən rədd edin 172.114.*.* 3.5. URL-i böyük simvollardan kiçik simvollara yönləndirin

URL-dəki bütün böyük hərflər kiçik hərflərə çevriləcək.

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

Yetər mühüm məqam saytı qurarkən. Yanlış konfiqurasiya edilmiş yönləndirmə saytın axtarış nəticələrinə böyük zərər verə bilər. Permanent Redirect 301-dən istifadə etməli olduğunuz ən ümumi vəziyyətlər:

  • Sayt ünvanının dəyişdirilməsi - domeninizi aldınız və site.example.com saytından site.ru saytına keçməyə qərar verdiniz.
  • Güzgülərin yapışdırılması - əgər saytınız www.site.ru və site.ru-da mövcuddursa, Axtarış motorları bunu iki fərqli sayt hesab edə bilər, ona görə də əvvəlcə əsas güzgüyə qərar verməlisiniz (www ilə və ya www olmadan) və əsas güzgüyə yönləndirmələri qurmalısınız.
  • Səhifə (bir və ya daha çox) ünvanını dəyişdikdə, müəyyən məqamda məlum oldu ki, http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 ünvanları yaxşı deyil və onlar lazım idi. http://example.com/sport/news12 olaraq dəyişdirilə bilər, lakin axtarış motoru indeksində mövqeləri itirmək təəssüf doğurur (çünki bu onlar üçün yeni məqalə olacaq).
  • Dublikat səhifələrlə məşğul olmağın başqa bir yolu

Vacibdir: səhifə müvəqqəti olaraq köçürülübsə, 302 Müvəqqəti olaraq köçürülüb istifadə edin. Bu halda, səhifələr birləşdirilməyəcək və yönləndirmə ilə səhifə həmişə bərpa edilə bilər.

Apache (.htaccess) üçün Daimi Yönləndirmə 301

Sətirlərdən dərhal sonra qaydaları daxil etməlisiniz:

Server kökündən saytın kökünə qədər tam yolu kəsmək üçün RewriteBase / # üzərində RewriteEngine

qaydaların özləri müntəzəm ifadələrdən istifadə etməklə müəyyən edilir; sintaksisi xatırlayın:

  • Nümunədə simvol qruplarını və ya "etiketləri" təyin etmək üçün metasimvollar:
    • ^ - xətt başlanğıc işarəsi,
    • $ - xəttin sonu işarəsi,
    • ! - inkar,
    • \ - escape slash, ondan sonrakı metaxarakteri adi simvol kimi nəzərdən keçirməyə imkan verir,
    • . - nöqtə, hər hansı bir simvolu ifadə edir, ancaq bir,
    • () - qruplaşdırma.
  • Modifikatorlar adi simvollardan, metaxarakterlərdən və ya onların qruplarından sonra yerləşdirilir:
    • ? - simvol 0 və ya 1 dəfə təkrarlanır,
    • * - 0-dan 65536 dəfə təkrarlanır,
    • + - 1-dən 65536 dəfə təkrarlanır.
  • Bayraqlar bu qayda üçün əlavə seçimləri müəyyən edir:
    • NC - (nocase) işin yoxlanılmasını söndürür.
    • R - (yönləndirmə) çevrilmə prosesini dayandırır və nəticəni müştəri brauzerinə bu səhifəyə yönləndirmə kimi qaytarır (302, MÜVƏQİQƏLƏNİLMİŞ).
      Bu bayraqla siz fərqli bir nəticə kodu təyin edə bilərsiniz, məsələn, R=301 301 kodu ilə yönləndirməni qaytaracaq (DAİMİ KÖŞÜNDÜ). Anladığınız kimi, məhz bu bizə lazımdır.
    • L - (son) çevrilmə prosesini dayandırır və cari keçid yekun hesab olunur.

Ən ümumi vəziyyətləri nəzərdən keçirin:

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 RewriteCond uyğunlaşarsa, RewriteRule qaydasını yerinə yetirəcək şərti bildirir. index.php (html) saytından əsas səhifəyə yönləndirmə RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php| html |htm)$1 Sayt strukturunu dəyişdirərkən yönləndirmə RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 PHP-də Daimi Yönləndirmə 301

Brauzerə onun tələb etdiyi səhifənin http://site.ru saytına yönləndirilməsinin lazım olduğunu bildirmək üçün aşağıdakı əmrləri yerinə yetirin:

Başlıq("HTTP/1.1 301 Daimi köçürüldü"); başlıq("Yer: http://site.ru"); çıxış();

Nginx üçün Daimi Yönləndirmə 301

İstiqamətləndirmə qaydaları server bölməsində təsvir edilmişdir.

www.site.ru saytından site.ru serverinə yönləndirmə (qulaq asmaq 80; server_name www.site.ru; yenidən yazmaq ^ http://site.ru$request_uri? daimi; )

və ya ümumi qayda bütün saytlar üçün:

Server ( server_name ~^(?! www\.); yenidən yazın ^ http://www.$host$request_uri daimi; )

site.ru saytından www.site.ru serverinə yönləndirmə (qulaq asmaq 80; server_name site.ru; yenidən yaz ^ http://www.site.ru$request_uri? daimi; ) index.php-dən əsas səhifənin yerinə yönləndirmə = / index.php ( əgər ($request_uri = /index.php) ( yenidən yazmaq ^ http://$host? daimi;#301 yönləndirmə ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $doot $ fastcgi_script_name; fastcgi_params daxil edin; )

301 Daimi Köçürülən statuslu HTTP status kodu tələb olunan sənədin başlığın Məkan sahəsində göstərilən yeni URI-yə daimi olaraq köçürüldüyünü göstərir.

Bu nə üçündür?

İlk növbədə saytın domen adını dəyişdirərkən saytın ünvanının dəyişməsi barədə axtarış sistemlərini xəbərdar etmək lazımdır. İkincisi, sayt adını www ilə və www olmadan birləşdirmək. Üçüncüsü, Page Rank-i tez bir zamanda yeni bir sayta köçürmək.

PHP

Birinci üsul

İkinci üsul

Perl

Birinci üsul

$cgi = yeni CGI; çap $cgi->redirect("http://www.example.com/");

İkinci üsul

#!/usr/bin/perl -w ciddi istifadə edin; çap "Statusu: 301 Daimi köçürülüb\n"; çap "Yer: http://www.example.com/\n\n"; çıxış;

ASP.NET

Birinci üsul

şəxsi etibarsız Səhifə_Yük (obyekt göndərən, System.EventArgs e) ( Response.Status = "301 Daimi köçürüldü"; Response.AddHeader("Yer","http://www.example.com"); )

İkinci üsul (4.0 versiyasından)

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

ASP Ruby on Rails def do_something headers["Status"] = "301 Daimi Köçürüldü" redirect_to "http://www.example.com/" sonu ColdFusion Java (JSP) Apache Web Server (.htaccess)

Birinci üsul (mod_alias, Yönləndirmə)

Yönləndirmə 301 / http://www.example.com

İkinci üsul (mod_alias, RedirectPermanent)

RedirectPermanent / http://www.example.com

Üçüncü üsul (mod_alias, Daimi yönləndirmə)

Daimi yönləndirmə / http://www.example.com

Dördüncü üsul (mod_alias, RedirectMatch)

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

Beşinci üsul (mod_rewrite)

Seçimlər +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1




Üst