#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]