Како да го пренасочите www на не-www со Apache на CentOS 7


Вовед

Многу веб-програмери треба да им овозможат на своите корисници пристап до нивната веб-локација или апликација и преку поддоменот www и преку доменот root (не-www). Односно, корисниците треба да го имаат истото искуство кога ги посетуваат www.my-website.com и my-website.com. Иако има многу начини да го поставите ова, најпријателското решение за оптимизација е да изберете кој домен го претпочитате - поддоменот или коренскиот домен - и веб-серверот да ги пренасочи корисниците кои го посетуваат другиот до преферираниот домен.

Постојат многу видови на пренасочувања на HTTP, но во ова сценарио, најдобро е да се користи пренасочување 301, кое им кажува на клиентите: „Веб-локацијата што ја побаравте трајно се пресели на друга URL-адреса. Наместо тоа, одете таму“. Откако прелистувачот ќе го прими кодот за одговор HTTP 301 од серверот, тој испраќа второ барање до новата URL дадена од серверот и на корисникот му е претставена веб-локацијата, веројатно никогаш не забележувајќи дека се пренасочени.

Зошто да не го конфигурирате вашиот веб-сервер само да ја опслужува истата веб-локација за барања до двата домени? Тоа може да изгледа полесно, но не ги дава предностите за оптимизација на пренасочувањето 301. Постојаното пренасочување им кажува на роботите на пребарувачите дека има една канонска локација за вашата веб-локација, а тоа го подобрува рангирањето на пребарувањето на таа една URL-адреса.

Во ова упатство, ќе конфигурирате пренасочување 301 користејќи Apache на CentOS 7. Ако користите Nginx наместо Apache, наместо тоа, видете го ова упатство: Како да го пренасочите www на Non-www со Nginx на CentOS 7

Предуслови

За да го завршите ова упатство, прво ви треба:

  • Привилегии на суперкорисник на серверот што работи Apache. Ако веќе не сте го поставиле тоа, следете го нашето почетно поставување на серверот со CentOS 7 водич.
  • Apache е инсталиран и конфигуриран да ја опслужува вашата веб-локација. Следете го ова упатство за да го направите тоа: Како да го инсталирате веб-серверот на Apache на CentOS 7.
  • Регистрирано име на домен. Ако сè уште немате, можете да добиете бесплатен од овој напис од нашата документација што покажува како да го направите тоа.

Ајде да започнеме со конфигурирање на вашите записи DNS.

Чекор 1 - Конфигурирање на записи DNS

Прво, треба да ги насочите и www.my-website.com и my-website.com на вашиот сервер кој работи на Apache. (Остатокот од упатството претпоставува дека вашиот домен е my-website.com. Заменете го со ваш сопствен домен каде и да го видите подолу.) Ќе го направите ова со создавање на запис за DNS A за секое име што укажува на IP адресата на вашиот Apache-сервер.

Отворете ја веб-конзолата на вашиот DNS провајдер. Овој туторијал користи DigitalOcean DNS.

Во формата Додај домен, внесете го вашето регистрирано име на домен во полето за текст и кликнете Додај домен. Ова ќе ја отвори страницата на новиот домен, каде што можете да прегледувате, додавате и бришете записи за доменот.

Под Креирај нов запис, напишете \@ во полето за текст HOSTNAME. Ова е специјален знак што покажува дека додавате запис за името на коренскиот домен, запис за едноставно my-website.com. Во текстуалното поле ЌЕ ПРЕДИРЕТ НА, внесете ја јавната IPv4 адреса на вашиот сервер и кликнете Креирај запис (Нема потреба да се менува TTL.)

За вашиот втор DNS запис, можете да користите запис CNAME наместо запис А. Записот CNAME е алијас што укажува на друго име наместо на IP адреса. Може да создадете CNAME што го насочува www.my-website.com кон my-website.com и секое барање HTTP за поддоменот www ќе го најде својот пат до вашиот сервер бидејќи штотуку го креиравте записот A за root доменот. Но, за нештата да бидат едноставни, само креирајте друг запис како првиот, внесувајќи \www во полето HOSTNAME и јавната IP адреса на серверот во ЌЕ ПРЕДИРЕКУВА НА Поле.

Кога сте ги создале двата записи, треба да изгледа вака:

Со двете записи поставени, веб-барањата и за my-website.com и за www.my-website.com треба да стигнат до вашиот Apache-сервер. Сега ајде да го конфигурираме серверот.

Чекор 2 - Конфигурирање на пренасочување во Apache

Веб-серверот на Apache обезбедува два модула кои ќе ви помогнат да ги конфигурирате пренасочувањата: mod_alias и mod_rewrite. Иако mod_rewrite е помоќен, mod_alias е поедноставен за разбирање и употреба. Ако треба да пренасочите барања што содржат специфични низи за прашања, на пример, или HTTP заглавија, ќе треба да користите mod_rewrite. Многумина избираат mod_rewrite за неговите можности за совпаѓање на редовните изрази, што му недостасува на mod_alias. Но, за едноставниот случај на пренасочување на сите барања за www.my-website.com на my-website.com, mod_alias ќе го стори тоа. (Самиот Apache препорачува да се избере mod_alias кога е можно, велејќи дека изборот на mod_rewrite кога е непотребно \води до конфигурации кои се збунувачки, кревки и тешки за одржување.)

Модулот треба да биде стандардно овозможен на CentOS 7, но за да проверите двапати, извршете ја оваа команда:

  1. httpd -M | grep alias_module

Ако на излезот се појави alias_module (shared), модулот е веќе овозможен. Ако не, овозможете го со додавање на оваа линија на /etc/httpd/conf.modules.d/00-base.conf:

  1. echo “LoadModule alias_module modules/mod_alias.so” | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf

Со овозможено mod_alias, можете да ги користите директивите Пренасочување, RedirectMatch и другите наведени во документите mod_alias во вашиот Конфигурација на Apache.

Сега да ги конфигурираме вашите VirtualHost.

Како што е наведено во Предусловите, веќе треба да ја имате конфигурирана вашата веб-страница во Apache. Може да биде конфигуриран во главната конфигурациска датотека на Apache (/etc/httpd/conf/httpd.conf) или можеби во сопствена датотека (на пр., /etc/httpd/conf.d/ my-website.com.conf). Ако го користевте Водичот за инсталирање на Apache поврзан во Предусловите за да ги конфигурирате вашите VirtualHost, тоа може да биде во датотека како /etc/httpd/sites-available/my-website. com.conf. Каде и да е конфигурирана вашата главна страница, отворете ја таа датотека во vi или во вашиот омилен уредувач (yum install nano, ако сакате):

  1. sudo vi /etc/httpd/conf/httpd.conf

Побарајте ги сите директиви ServerAlias поставени во VirtualHost. Ако најдете линија со ServerAlias поставен на www.my-website.com, отстранете ја таа линија. (Или, ако таа линија содржи многу псевдоними во списокот разделен со запирки, отстранете го само www.my-website.com од списокот.) Треба да го отстраните овој псевдоним затоа што ќе создадете посебен VirtualHost за поддоменот што не содржи ништо друго освен Име на сервер и Пренасочување. Главниот VirtualHost за страницата повеќе нема да опслужува барања за www.my-website.com.

Сега креирајте VirtualHost во посебна датотека (на пр. /etc/httpd/conf.d/www.my-website.com.conf) :

  1. sudo vi /etc/httpd/conf.d/www.my-website.com.conf

Залепете ја следната содржина во датотеката, заменувајќи го my-website.com со вашето сопствено име на домен:

<VirtualHost *:80>
    ServerName www.my-website.com
    Redirect permanent / http://my-website.com/
</VirtualHost>

Зачувајте и излезете кога ќе завршите. Ако сте ја создале оваа датотека во /etc/httpd/sites-available, како што е наведено во нашиот водич за инсталирање на Apache, креирајте симболична врска до датотеката во /etc/httpd/sites-enabled/:

  1. sudo ln -s /etc/httpd/sites-available/www.my-website.com.conf /etc/httpd/sites-enabled/

Овој нов VirtualHost го конфигурира Apache-то да испраќа 301 пренасочување назад до сите клиенти кои бараат www.my-website.com и ги насочува да го посетат my-website.com наместо тоа. Пренасочувањето го зачувува URI на барањето, така што барањето до http://www.my-website.com/login.php ќе биде пренасочено на http://my-website.com /login.php.

Забелешка: ако главниот VirtualHost на вашата страница содржи ServerAlias со поддомен со џокер-*.my-website.com — треба да размислите да го отстраните и да создадете нов VirtualHost како оној што штотуку го создадовте за секој поддомен што сакате да го пренасочите. Ако не сакате да ги пренасочувате сите поддомени и ви треба некои од нив да продолжат да се опслужуваат од главниот VirtualHost, најдобро е експлицитно да го именувате секој поддомен како алијас, особено сега кога имате еден поддомен чии барања не сакате ненамерно да се совпаѓаат со главниот VirtualHost. (Можете да го именувате секој поддомен на сопствената линија ServerAlias или сите да ги именувате како листа одвоена со запирки во една линија ServerAlias.)

Ако мора да го задржите ServerAlias за *.my-website.com, треба да бидете сигурни дека Apache ја вчитува новата www VirtualHost пред главната еден, затоа што ако главниот е вчитан прво, Apache ќе го користи за справување со барањата за www.my-website.com бидејќи тоа име се совпаѓа со алијасот на џокерот. Извршете ја следнава команда за да видите кој VirtualHost ќе се вчита прво откако ќе го рестартирате Apache:

  1. httpd -S

Побарајте ги линиите што ги содржат namevhost my-website.com и namevhost www.my-website.com. Ако линијата www се појави прво, сè сте подготвени. Меѓутоа, ако прво се појави VirtualHost за root доменот, постојат неколку начини како Apache-то прво да го вчита www:

  1. Ако вашиот главен VirtualHost е содржан во датотека (на пр. /etc/httpd/conf/httpd.conf) што користи Include или IncludeOptional директива за да го вклучи директориумот што го содржи вашиот нов www VirtualHost, само преместете ја линијата Include над главниот VirtualHost во датотеката.
  2. Ако вашите главни датотеки VirtualHost и вашите нови www VirtualHost се содржани во истиот директориум (на пр., /etc/httpd/conf.d/), можете да го принудите Apache-то прво да го вчита www со преименување на датотеките и приложување на некои броеви до имињата на датотеките. Прикачете го 01- на името на датотеката на www VirtualHost (на пр., /etc/httpd/conf.d/01-www.my-website.com. conf) и 02- до името на главната датотека VirtualHost (на пр., /etc/httpd/conf.d/02-my- website.com.conf).

Повторно стартувајте го httpd -S за да се осигурате дека www VirtualHost се појавува прво.

Кога ќе бидете подготвени, рестартирајте го Apache:

  1. sudo systemctl restart httpd

Пред да ја посетите www.my-website.com во вашиот прелистувач, поднесете барање користејќи curl или на вашиот сервер или на вашата локална машина (ако curl е инсталиран локално):

  1. curl -IL http://www.my-website.com

Знамето -I му кажува на curl да ги прикажува само заглавјата од одговорот на серверот. Знамето -L му кажува на curl да ги почитува сите пренасочувања од серверот со автоматско испраќање второ барање, овој пат до URL-то дадено во Локација заглавие (исто како што би направил веб прелистувачот). Бидејќи сте го конфигурирале пренасочувањето 301, curl треба да испрати две барања, а вие треба да ги видите само заглавјата на двата одговори:

Output
HTTP/1.1 301 Moved Permanently Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Location: http://my-website.com/ Content-Type: text/html; charset=iso-8859-1 HTTP/1.1 200 OK Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT ETag: "39-5eecb7ed6bfc9" Accept-Ranges: bytes Content-Length: 57 Content-Type: text/html; charset=UTF-8

Во одговорот 301 (Moved Permanently) на оригиналното барање до http://www.my-website.com, забележете го вториот до последното заглавие: Локација: http://my- website.com. Вториот одговор е од барањето за следење на curl до URL-то дадено во заглавието Location, и ако вашата веб-локација е здрава, серверот требало да одговори со 200 (OK) .

Конечно, посетете го http://www.my-website.com во вашиот веб-прелистувач. Трепкајте и ќе го пропуштите пренасочувањето. Вашата веб-локација треба да се појавува како и обично, но погледнете повторно во лентата за адреси и забележете дека \www недостасува на URL-то. Повеќето корисници никогаш нема да го забележат ова и така ќе го имаат истото искуство како да побарале http://my-website.com.

Заклучок

Во ова упатство, додадовте две записи за DNS за вашата веб-страница и го конфигуриравте Apache да пренасочува секундарен домен до вашиот претпочитан домен. Сега вашата веб-страница е достапна преку двата домени. Можеби тоа веќе беше пред да го прочитате ова упатство; можеби го сервиравте директно од двата домени. Но, со само четири линии на конфигурација на Apache, ја подобривте позицијата на вашата веб-страница во очите на пребарувачите - и со тоа ја изложивте на повеќе корисници низ Интернет.

Љубопитни сте за помоќниот модул mod_rewrite? Проверете го нашиот туторијал Како да се препишуваат URL-адреси со mod_rewrite за Apache на Ubuntu 22.04.