Utilia

Генератор на .htaccess пренасочвания

Генерирайте 301 и 302 пренасочвания за .htaccess или Nginx, задължителен HTTPS и www, преместване на домейн и крайна черта, с проверка за цикли и вериги.

Сървър
Тип пренасочване
Каноничен адрес
Крайна наклонена черта
Преместване на целия домейн

Първо направете резервно копие на текущата конфигурация и тествайте с 302, преди да превключите на 301: браузърите кешират постоянните пренасочвания.

Проверки

Как се използва генераторът на .htaccess пренасочвания

  1. Изберете Сървър: Apache (.htaccess) или Nginx, после Тип пренасочване: 301 – постоянно или 302 – временно.
  2. В Пренасочвания на страници (по едно на ред: стар път, после нов URL) пишете по едно пренасочване на ред: стария път, интервал, после новия URL, например /stara-stranica.html /nova-stranica/. Работят и табулация, запетая или ->, а можете да поставяте и пълни стари URL адреси или готови редове Redirect 301 /a /b.
  3. По желание въведете Вашият домейн (по избор) (например example.com), за да сочат пренасочванията на страници направо към крайния адрес.
  4. В Каноничен адрес отметнете Задължителен HTTPS и изберете Задължителен www, Премахни www или Остави www както е. В Крайна наклонена черта изберете дали да се добавя или премахва.
  5. Ако целият сайт е преместен, попълнете Преместване на целия домейн със Стар домейн и Нов адрес (абсолютен URL) и оставете отметнато Запази пътя, за да попада всяка страница на своя еквивалент.
  6. Прочетете Проверки, после Копирай или Изтегли правилата. С Зареди пример виждате пълна конфигурация.

Всичко се случва във вашия браузър. Нищо от въведеното не се изпраща към сървър.

Как работят генерираните правила

За Apache инструментът пише правила на mod_rewrite, започващи с един RewriteEngine On. Всяка страница става RewriteRule, чийто шаблон започва с ^/?, така че работи както във файл .htaccess (където началната наклонена черта се премахва), така и в блок <VirtualHost>. Точките, скобите, знаците плюс и другите символи на регулярните изрази във вашите пътища се екранират, а интервалът става \x20. В новия URL $ и % се екранират, защото Apache би ги прочел като обратни препратки, а флагът NE не позволява на Apache да кодира URL адреса втори път.

RewriteRule никога не вижда заявката (query string). Когато стар адрес съдържа такава, като /product.php?id=42, инструментът добавя ред RewriteCond %{QUERY_STRING} ^id=42$ и флага QSD, така че старите параметри да се отхвърлят, вместо да се копират в новата страница.

Правилата са подредени така, че да се избягват излишни скокове: първо преместване на домейна, после пренасочвания на страници, после крайната наклонена черта, накрая HTTPS и www. HTTPS и www се обработват от едно правило, така че http://www.example.com отива към https://example.com с едно пренасочване. Когато домейнът ви е известен, пренасочванията на страници и на наклонената черта вече сочат към крайния HTTPS адрес.

За Nginx HTTPS, www и преместването на домейн стават отделни блокове server с return 301, а пренасочванията на страници стават редове rewrite, които поставяте в основния си блок server. Те се изпълняват преди съпоставянето на location, затова имат предимство и пред правилото за крайната наклонена черта. Знакът ? в края на целта не позволява на Nginx да добави старата заявка, когато не бива.

Извършвани проверки

  • Страница, която пренасочва към себе си, или две страници, които се пренасочват една към друга (цикъл, който завършва с „too many redirects“).
  • Вериги като A → B → C: насочете A направо към C, защото всеки допълнителен скок забавя посетителите и харчи бюджета за обхождане.
  • Един и същ стар адрес, изброен два пъти, при което важи само първото правило.
  • Цел, която не е нито абсолютен URL, нито път, започващ с /, или цел с http:// или с грешен www на собствения ви домейн.
  • Настройка за крайната наклонена черта, която би пренасочила цел отново или би я върнала към източника ѝ.

Често задавани въпроси

301 или 302?

Използвайте 301, когато преместването е постоянно: търсачките пренасят сигналите на старата страница върху новата и обновяват индекса си. Използвайте 302 за временни промени като поддръжка или кратка кампания. Браузърите кешират 301 пренасочванията, затова първо тествайте с 302.

Къде да сложа файла .htaccess?

В основната папка на сайта (често public_html или www), до index.php или index.html. Изтегленият файл се казва htaccess.txt; преименувайте го на .htaccess или поставете правилата най-горе в съществуващия си файл. Пазете резервно копие на оригинала.

Защо RewriteRule, а не Redirect 301?

Редовете Redirect идват от mod_alias и се изпълняват във фаза, различна от тази на RewriteRule. Смесването на двата в един файл прави реда трудно предвидим. Само с mod_rewrite всяко правило е в една предвидима последователност и може да се съпоставят заявки (query string).

Сайтът ми показва „too many redirects“ след задължителния HTTPS. Защо?

Зад балансьор на натоварването, CDN или прокси, който прекратява HTTPS, Apache вижда всяка заявка като обикновен HTTP, така че %{HTTPS} винаги е изключено. В такъв случай проверявайте препратения хедър, например RewriteCond %{HTTP:X-Forwarded-Proto} !https, или включете пренасочването в CDN.

Променя ли този инструмент моя сървър?

Не. Той само генерира текст във вашия браузър. Нищо не се изпраща никъде и вие решавате къде и как да се инсталират правилата.