Принудительное добавление или удаление www в адресе сайта

Board index phpBBex 1.x Мастерская

Description: Только готовые решения! Статьи, заметки, моды и другие полезности для phpBBex 1.x и phpBB 3.0.x.
Moderator: Поддержка

Post #1by VEG » 10.10.2012, 12:27

Универсальное решение проблемы постоянных редиректов на домен с или без www при помощи mod_rewrite без привязки к вашему домену. Просто и полезно. Работает на любом домене без необходимости править для каждого сайта. Все способы сохраняют исходный URI, изменяется только домен!

Для работы данного способа у вас в Apache должен быть включён модуль mod_rewrite. Если при добавлении указанных ниже строк вы получаете 500 ошибку — скорее всего дело в отсутствии данного модуля. Также проверьте кодировку: она должна быть UTF-8 без BOM или ANSI. Ещё возможны проблемы с неверным типом перевода строки: он должен быть или Win, или Unix, и ни в коем случае не Mac! Кодировки и перевод строки можно смотреть и настраивать в Notepad++.

Итак, начнём. Для начала открываете (или создаёте новый) .htaccess файл в корне сайта и ищете там следующие строки, если нет — добавляете в конец:
Code: Select all
RewriteEngine On
RewriteBase /
После этих строк нужно вставить нужный вариант правил, описание которых ниже.

Принудительный редирект с субдомена www на обычный (простой способ для HTTP и стандартного порта):
Code: Select all
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,L]

Если ваш сайт работает по HTTPS или на каком-то нестандартном порту, вам пригодится более мощный способ удаления www:
Code: Select all
# В переменную окружения %{ENV:PROTOCOL} помещаем протокол
RewriteRule ^(.*)$ - [E=PROTOCOL:http]
RewriteCond %{HTTPS} ^on$ [NC]
RewriteRule ^(.*)$ - [E=PROTOCOL:https]
# Если нужно убираем www
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1:%{SERVER_PORT}%{REQUEST_URI} [R=301,L]

Принудительный редирект с обычного домена на субдомен www (простой способ для HTTP и стандартного порта):
Code: Select all
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Для сайтов, доступных по HTTPS или на нестандартных портах также есть возможность принудительного добавления www:
Code: Select all
# В переменную окружения %{ENV:PROTOCOL} помещаем протокол
RewriteRule ^(.*)$ - [E=PROTOCOL:http]
RewriteCond %{HTTPS} ^on$ [NC]
RewriteRule ^(.*)$ - [E=PROTOCOL:https]
# Если нужно добавляем www
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ %{ENV:PROTOCOL}://www.%{HTTP_HOST}:%{SERVER_PORT}%{REQUEST_URI} [R=301,L]

Если у вас кривой хостинг, позволяющий открывать сайт с любым количеством www перед доменом (www.www.www.example.com), избавиться от них можно также одним редиректом. Этот код нужно устанавливать вместо указанных выше, а не в дополнение к ним!

Версия с удалением всех www в адресе (для HTTP и стандартного порта):
Code: Select all
RewriteCond %{HTTP_HOST} ^(www\.)+(.*) [NC]
RewriteRule ^(.*)$ http://%2%{REQUEST_URI} [R=301,L]

Версия с сохранением одного www в адресе (для HTTP и стандартного порта):
Code: Select all
RewriteCond %{HTTP_HOST} ^www\.(www\.)+(.*) [NC]
RewriteRule ^(.*)$ http://www.%2%{REQUEST_URI} [R=301,L]

Для исключения возникновения 500 ошибок при отсутствии mod_rewrite можно все инструкции для этого модуля разместить в блоке:
Code: Select all
<IfModule mod_rewrite.c>
# Инструкции для mod_rewrite здесь
</IfModule>

То есть в результате, например, для простого способа удаления www из адреса у вас должно получиться что-то вроде:
Code: Select all
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 29
Location: Минск, Беларусь
Reputation: 1607
With us: 4 yaers 9 months


Post #41by Xisp » 16.09.2013, 17:55

В общем вот правильный вариант- два отдельных правила :smile:
Code: Select all
# no-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule .* https://%1%{REQUEST_URI} [R=301,L]

# force HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Xisp
Бывалый
Reputation: 9
With us: 3 yaers 9 months

Post #42by malkin » 13.10.2013, 13:36

А как же всё таки грамотно убрать
Code: Select all
/index.php
с главной страницы. Не хочется чтобы люди ссылались именно так.
malkin
Бывалый
Reputation: 1
With us: 3 yaers 3 months

Post #43by Sumanai » 13.10.2013, 21:25

Открыть \includes\functions.php, найти в нём строку
Code: Select all
      'U_INDEX'            => append_sid("{$phpbb_root_path}index.$phpEx"),
И заменить на
Code: Select all
      'U_INDEX'            => append_sid("{$phpbb_root_path}"),
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #44by Ленар » 15.10.2013, 13:01

А почему изначально стоит адрес с /Index.php? Значит при удалание его способом выше это на что то может повлиять?
Ленар
Новичок
Reputation: 0
With us: 3 yaers 3 months

Post #45by Sumanai » 15.10.2013, 15:53

Ленар wrote:А почему изначально стоит адрес с /Index.php?

Потому что у кого- то по адресу без него может открываться например портал, или просто сайт. Мало ли.

Ленар wrote:Значит при удалание его способом выше это на что то может повлиять?

Это повлияет только на появление Index.php в ссылках на главную страницу.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #46by HD321kbps » 22.08.2015, 16:47

добавил строку
Code: Select all
RewriteRule ^index.php$ / [QSA,R]
Для перенаправленный site.ru/index.php на site.ru. Все норм!
Зашел через Firefox 40.0.2 вбиваю сайт он кидает на site.ru/install/index.php
Как от этого избавиться?
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

Post #47by Sumanai » 22.08.2015, 16:59

HD321kbps wrote:он кидает на site.ru/install/index.php
В кеше браузера могло остаться перенаправление на этот адрес со времён установки форума. Очисти.
У меня например работает.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #48by HD321kbps » 22.08.2015, 17:01

Да вроде нажимал F5 нефига, через настройки удалил теперь все ок)
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

Post #49by Sumanai » 22.08.2015, 17:04

Вообще, нужно бы отдавать 302 заголовок для этого перенаправления, чтобы браузеры его не кешировали.
Писать на официальный сайт в багтрекер или забить и сделать только у нас?

Added after 5 minutes 36 seconds:
Хотя нет, отдаётся 302 заголовок, так что не знаю, почему он кеширует. Хотя может это только у меня так...
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #50by HD321kbps » 22.08.2015, 17:11

Sumanai wrote:Писать на официальный сайт в багтрекер или забить и сделать только у нас?
Разве не баг браузера?
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

Post #51by Sumanai » 22.08.2015, 17:14

Смотря какой заголовк ему отдаётся. Кешировать перенаправление 301- нормально, а вот 302 кешировать нельзя.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #52by HD321kbps » 22.08.2015, 17:19

ну тогда в баг трекер)
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

Post #53by Sumanai » 22.08.2015, 17:30

Пока я вижу, что отдаётся 302, значит, phpBB не при делах.

Added after 3 minutes 28 seconds:
HD321kbps, залей себе файлик из архива, проверим, что отдаёт твой сервер.
Last edited by Sumanai on 22.08.2015, 17:46, edited 1 time in total.
Reason: Удалил файл
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #54by HD321kbps » 22.08.2015, 17:37

запустил перенаправило на site.ru что дальше?
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

Post #55by Sumanai » 22.08.2015, 17:45

Да ничего, нужно было на заголовки посмотреть. И у тебя 302, значит дело не в сервере и не в phpBB.

Added after 3 minutes 4 seconds:
Хотя как вариант можно было бы посмотреть на вкладке "Сеть" или типа такой в инструментах разработчика, как ведёт себя браузер при обращении к этому файлу повторно. В FF к примеру есть такая фигня, как BFCache, которая показывает, что ресурс взят из кеша.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #56by HD321kbps » 22.08.2015, 17:54

в кэше при обращении повторном
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

Post #57by Sumanai » 22.08.2015, 17:55

Скриншот и версию браузера.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #58by HD321kbps » 22.08.2015, 17:59

вот
1.png

2.png
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

Post #59by Sumanai » 22.08.2015, 18:07

Блин, Firebug показывал иное, у меня тот же браузер.
Ну конечно же!
Code: Select all
Cache-Control: max-age=604800
Expires: Sat, 29 Aug 2015 14:44:43 GMT
Попробуй очистить кеш и попробовать с этим файлом
Last edited by Sumanai on 22.08.2015, 18:21, edited 1 time in total.
Reason: Удалил файл
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M Online
Гуру
Avatar
Reputation: 1494
With us: 3 yaers 11 months

Post #60by HD321kbps » 22.08.2015, 18:19

пустой экран, не перенаправляет)
1.png
1.png (10.86 KiB) Viewed 2336 times
HD321kbps M
Гуру
Avatar
Age: 26
Location: Армянск
Reputation: 308
With us: 3 yaers 10 months

PreviousNext

Forum name: Мастерская
Description: Только готовые решения! Статьи, заметки, моды и другие полезности для phpBBex 1.x и phpBB 3.0.x.

Quick reply


Enter the code exactly as it appears. All letters are case insensitive.
Confirmation code
:hi: :smile: :wink: :twisted: :sad: :evil: :smoke: :eh: :eek: :fie: :silenced: :razz: :oops: :help: :spy: :insane: :biggrin: :toothless: :ill: :nervious: :weirdface: :pray: :clap: :think: :boxing: :cyclop: :rambo: :zombie: :cry: View more smilies

   

Return to Мастерская



Who is online (over the past 10 minutes)

Users browsing this forum: 1 guest