Перенаправление домена, отличного от www, но не IP-адресов

#mod-rewrite #apache2 #no-www

#переписывание мода #apache2 #нет-www

Вопрос:

Я ищу способ перезаписать не-www-домены в www-домены, в то же время не перенаправляя прямые IP-запросы.

У меня есть несколько сайтов на одном сервере, то есть: хост по умолчанию (виртуальный) и один виртуальный хост с именем сервера и несколькими серверными интерфейсами, которые работают отлично. Я предпочитаю, чтобы имена доменов начинались с «www». Итак, я взломал следующий код вместе, который отлично работает:

 RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  

Он не обрабатывает https, но самая большая проблема заключается в том, что запросы к серверу-IP также переписываются, например, с «123.45.67.8» на «www.123.45.67.8 «. Я мог бы добавить строку ниже, чтобы решить эту проблему:

 RewriteCond %{HTTP_HOST} !^[0-9] .[0-9] .[0-9] .[0-9] $
  

… но эффективно ли это? А как насчет IPv6?

Не будучи специалистом по mod_rewrite, я пытался выяснить, как другие люди решили эту проблему, но безуспешно.

Ответ №1:

Это потому, что ваше условие проверяет, начинается ли оно только с www, попробуйте это вместо этого (я оставил необязательный код https):

 RewriteCond %{HTTP_HOST} ^(yourdomain|thisdomain|thatdomain).com
#RewriteCond %{HTTPS} =on
#RewriteRule .* https://www.%{SERVER_NAME}%{REQUEST_URI} [R,L]
RewriteRule .* http://www.%{SERVER_NAME}%{REQUEST_URI} [R,L]