Рэдырэкт .htaccess: пераадрасацыя на іншы дамен і перанакіраванне на іншую старонку

  1. Рэдырэкт .htaccess: пастаяннае перанакіраванне, 301
  2. Як наладзіць рэдырэкт на www (або без www)
  3. Як стварыць .htaccess
  4. Файл .htaccess не працуе
  5. Ці ёсць які-небудзь аналаг .htaccess у nginx?
  6. аўтар публікацыі
  7. x64 (aka andi)

Добрага нядзельнага дня!

Вельмі часта на форумах можна сустрэць пытанні, прысвечаныя .htaccess - файлу канфігурацыі вэб-сервера Apache. Асноўны камень перапоны ў тым, што пры распрацоўцы ня стаяла задача зручнай канфігурацыі для канчатковага карыстальніка (у дыстрыбутыў не ўключана абалонка для візуальных установак з дапамогай галачак, выпадющих спісаў і да таго падобнае), затое адміністратары сервераў спраўляюцца з гэтай задачай выдатна, задавальняючыся «Манам» (ад каманды Linux - man - кароткае кіраўніцтва ад распрацоўшчыкаў, ці ў дадзеным выпадку - ад прафесіяналаў для прафесіяналаў).

У большасці выпадкаў патрабуюцца зусім нескладаныя маніпуляцыі: безумоўны рэдырэкт на іншы сайт, альбо перанакіраванне з аднаго месца ў іншае (дапусцім, калі памяняўся URL часткі). І кожны чалавек пачынае лічыць, што ўжо яго-то праблемы дакладна нідзе няма, і нават бескарысна шукаць рашэнне ў інтэрнэце і пошуку па форуме. Давайце ж паглядзім, што гэтыя праблемы такімі на самай справе не з'яўляюцца.

Давайце ж паглядзім, што гэтыя праблемы такімі на самай справе не з'яўляюцца

Рэдырэкт .htaccess: пастаяннае перанакіраванне, 301

Падобная штука мае розныя назвы. Непаразумелкі можа выклікаць хіба што лік - чаму ж 301? Сутнасць крыецца ў самым пратаколе HTTP, які на запыты кліента адказвае вызначаным кодам стану. Код 404 Not Found (Старонка не знойдзена) вядомы амаль усім. Код 200 OK амаль не вядомы, але менавіта ён азначае, што ўсё ў парадку і дакумент будзе паказаны ў браўзэры. А вось код 301 Moved Permanently азначае, што дакумент канчаткова перабраўся на новы адрас. Менавіта яго і называюць часцей за ўсё перанакіраваннем, хоць агульны пул адказаў пазначаны як - 3xx: Redirection.

У Apache ёсць некалькі магчымасцяў для ажыццяўлення рэдырэкт. Модуль mod_rewrite дае выдатны механізм працы з перанакіраваннем, і ў далейшым я буду выкарыстоўваць у прыкладах менавіта яго. У модулі mod_alias таксама маюцца дырэктывы для рэдырэкт з пэўнага адрасы або з адрасу, які адпавядае рэгулярнаму выразу:
Redirect permanent / http://newsite.ru/
RedirectMatch permanent. * Http://newsite.ru/
Але ў mod_rewrite маюцца дадатковыя магчымасці для пераадрасацыі, таму лепш ужываць (IMHO) яго.

У агульным выпадку, для безумоўнага вонкавага (назавем яго карыстацкім) рэдырэкту, пры якім браўзэр аўтаматычна пераадрасоўваецца на іншую старонку, звычайна незаўважна для карыстальніка (змяняецца адрасная радок), можна ў .htaccess змясціць такі код:
RewriteEngine On
RewriteRule. * Http://newsite.ru/ [L, R = permanent]
Тут, першы радок ўключае механізм модуля mod_rewrite, які дазваляецца вытвараць з адрасамі ўсё, што заўгодна. Назавем гэта пераўтварэннем URL па ўмовах на лета. Другая радок вызначае непасрэдна правіла для пераўтварэння, у прыкладзе вышэй ўсе запыты рэдырэкт на http://newsite.ru/. У квадратных дужках размяшчаюцца сьцягі: L - апошняе (Last) правіла, R - тып перанакіравання (Redirect), паказваецца ў выглядзе R = code, дзе code - літарнае або лікавае абазначэнне (permanent або 302).

На самай справе, mod_rewrite - штука вельмі карысная, бо менавіта дзякуючы гэтаму многія рухавічкі актыўна выкарыстоўваюць так званыя ЧПУ (Чалавеку Зразумелы URL). Калі вам незнаёмы гэты тэрмін, растлумачу на прыкладзе. артыкул пра бясплатныя рухавічкі для сайта мае адрас: https://a-panov.ru/2014/11/free-cms/

Паглядзеў на гэты URL, адразу відаць, што артыкул апублікаваны ў лістападзе 2014. Прыбраўшы назву з які заключае слеша - https://a-panov.ru/2014/11/ - атрымаем спіс усіх публікацыя за лістапад. Звычайныя адрасы, выгляду:

https://a-panov.ru/?p=389

асаблівай прыязнасцю не адрозніваюцца. Убачыўшы такі адрас, нельга сказаць пра старонку, на якую ён вядзе, рашуча нічога.

Гэты спосаб добры, калі вам усё роўна, на якую старонку новага сайта спасылацца. Але калі вы пераехалі на іншы дамен, то пажадана рабіць рэдырэкты ўсіх запытаў з захаваннем адрасоў. Для гэтага выкарыстоўвайце такі код:
RewriteRule ^. * $ Http://newsite.ru/$0 [QSA, L, R = permanent]
Новы сцяг QSA захавае гэтак жа і параметры, якія можна сустрэць у адрасах пасля знака пытання. Ва ўжо знаёмым прыкладзе:

https://a-panov.ru/?p=389

калі я змясцую ў .htaccess код вышэй, то адбудзецца перанакіраванне на адрас http://newsite.ru/?p=389 чаго без дадзенага сцяга не было б.

Тут і далей я буду апускаць дырэктыву ўключэння пераўтварэнняў:
RewriteEngine On
проста памятайце: калі вы карыстаецеся механізмам mod_rewrite, то ўсе ўмовы / пераўтварэнні павінны выконвацца пасля гэтай дырэктывы. Для адключэння выкарыстоўваецца такая радок:
RewriteEngine Off
адпаведна, для кожнага правіла няма патрэбы пастаянна «ўключаць» пераўтварэнні - гэта пачынае рабіцца аўтаматычна, адразу пасля першай дырэктывы.

Як наладзіць рэдырэкт на www (або без www)

Падобныя перанакіравання патрабуюцца для выпадкаў, калі сайт даступны па варыянтах nsite.ru і www.nsite.ru, у гэтым выпадку пашукавікі лічаць іх дублямі і могуць альбо самастойна выбраць адзін з варыянтаў у якасці галоўнага люстэрка , Альбо ў пошуку будуць варыянты з абодвух даменаў. У агульным выпадку, гэта адмоўны фактар ​​пры ранжыраванні сайта.

Варыянт прасцей, для аднаго дамена. Перанакіраванне вырабляецца з поддомен www.site.ru на site.ru:
RewriteCond% {HTTP_HOST} ^ www \ .nsite \ .ru $
RewriteRule. * Http://nsite.ru/$0 [QSA, L, R = permanent]
Тут з'явілася новая дырэктыва RewriteCond, якая задае ўмова, пры якім павінны спрацоўваць рэдырэкты - правілы RewriteRule. Ўмова, у дадзеным выпадку, імя дамена, якое адпавядае www.nsite.ru (у рэгулярных выразы знак кропкі азначае «любы знак», таму яго пажадана экраніровать з дапамогай зваротнага слеша).

Адваротнае перанакіраванне таксама выканаць вельмі проста:
RewriteCond% {HTTP_HOST} ^ nsite \ .ru $
RewriteRule. * Http://www.nsite.ru/$0 [QSA, L, R = permanent]
Абодва варыянты рабочыя, але ў іх ёсць маленькі мінус - для кожнага новага конфігу неабходна замяняць дамен nsite.ru на свой уласны. Ці нельга зрабіць унікальны варыянт? Лёгка!

Рэдырэкт з любога поддомен www:
RewriteCond% {HTTP_HOST} ^ www \. (. *) $
RewriteRule. * Http: //% 1 / $ 0 [QSA, L, R = permanent]

Рэдырэкт на поддомен з www:
RewriteCond% {HTTP_HOST}! ^ Www \.
RewriteRule. * Http: //www.% {HTTP_HOST} / $ 0 [QSA, L, R = permanent]

% {HTTP_HOST} - бягучы дамен

Як стварыць .htaccess

Такія пытанні таксама ўзнікаюць. Праблема ў тым, што стандартны Правадыр (дадатак у Windows, якое адказвае за графічны інтэрфейс) не дазваляе ствараць файлы, назвы якіх пачынаюцца з кропкі (стварэннем файлаў або папкок ажыццяўляецца пстрычкай правай кнопкай на працоўным стале або ў акне, і выбару патрэбнага дзеянні са спісу Стварыць). Але выйсце ёсць: адкрывайце стандартны рекдатор Notepad (нататнік), у меню выбіраеце Файл → Захаваць як ..., і ў якасці імя захоўваецца файла паказваеце .htaccess - пасля гэтага ён будзе створаны.

Файл .htaccess не працуе

Бываюць выпадкі, калі дырэктывы з файла не працуюць. Звычайна гэта выклікана тым, што ў канфігурацыі Apache адключаная падтрымка .htaccess, за што адказвае дырэктыва:
AllowOverride none

Звычайна гэта робіцца, каб некалькі павялічыць хуткадзейнасць - у гэтым выпадку вэб-сервер не вырабляе пошук і разбор .htaccess.

Магчымы і такі варыянт, што на серверы не выкарыстоўваецца Apache, напрыклад, IIS - асноўны «госць» на Windows-хостынгу. Для ўдакладнення звяжыцеся з падтрымкай свайго хосцера.

Ці ёсць які-небудзь аналаг .htaccess у nginx?

Яшчэ адзін даволі часты пытанне. У гэтым вэб-сервера такой магчымасці няма. Аднак, падобнае звычайна і не патрабуецца. Справа ў тым, што nginx, як правіла, усталёўваецца ў якасці фронденда, т. Е. Прымае і апрацоўвае ўсе запыты, якія альбо выконвае сам, альбо перанакіроўвае на бэкенд, роля якога можа выконваць Apache, які можна дадаткова канфігураваць з дапамогай .htaccess.

аўтар публікацыі

не ў сеткі 1 дзень

x64 (aka andi)

Каментары: 2834 Публікацыі: 394 Рэгістрацыя: 2009/04/02

Htaccess у nginx?
Непаразумелкі можа выклікаць хіба што лік - чаму ж 301?
Ru/?
Ru/?
Ru/?
Ці нельга зрабіць унікальны варыянт?
Htaccess у nginx?