Како да го пренасочите 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, но за да проверите двапати, извршете ја оваа команда:
- httpd -M | grep alias_module
Ако на излезот се појави alias_module (shared)
, модулот е веќе овозможен. Ако не, овозможете го со додавање на оваа линија на /etc/httpd/conf.modules.d/00-base.conf
:
- 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
, ако сакате):
- 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
) :
- 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/
:
- 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:
- httpd -S
Побарајте ги линиите што ги содржат namevhost my-website.com
и namevhost www.my-website.com
. Ако линијата www се појави прво, сè сте подготвени. Меѓутоа, ако прво се појави VirtualHost
за root доменот, постојат неколку начини како Apache-то прво да го вчита www:
- Ако вашиот главен
VirtualHost
е содржан во датотека (на пр./etc/httpd/conf/httpd.conf
) што користиInclude
илиIncludeOptional
директива за да го вклучи директориумот што го содржи вашиот нов wwwVirtualHost
, само преместете ја линијатаInclude
над главниотVirtualHost
во датотеката. - Ако вашите главни датотеки
VirtualHost
и вашите нови wwwVirtualHost
се содржани во истиот директориум (на пр.,/etc/httpd/conf.d/
), можете да го принудите Apache-то прво да го вчита www со преименување на датотеките и приложување на некои броеви до имињата на датотеките. Прикачете го01-
на името на датотеката на wwwVirtualHost
(на пр.,/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:
- sudo systemctl restart httpd
Пред да ја посетите www.my-website.com
во вашиот прелистувач, поднесете барање користејќи curl
или на вашиот сервер или на вашата локална машина (ако curl
е инсталиран локално):
- curl -IL http://www.my-website.com
Знамето -I
му кажува на curl
да ги прикажува само заглавјата од одговорот на серверот. Знамето -L
му кажува на curl
да ги почитува сите пренасочувања од серверот со автоматско испраќање второ барање, овој пат до URL-то дадено во Локација
заглавие (исто како што би направил веб прелистувачот). Бидејќи сте го конфигурирале пренасочувањето 301, curl
треба да испрати две барања, а вие треба да ги видите само заглавјата на двата одговори:
OutputHTTP/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.