Как перенаправить non-www к www без жесткого кодирования с помощью .htaccess?

Мне сообщил Rackspace, что они планируют добавить эту функциональность в какой-то момент в ближайшем будущем (конец 2009 года или в начале 2010).

Та функциональность при реализации позволит Вам делать что-то вдоль этих строк:

(использование управления GUI или API)

  1. Скопируйте изображение сервера в Облачные Файлы
  2. Уничтожьте рабочий экземпляр сервера
  3. Создайте абсолютно новый экземпляр, с помощью сохраненного образа резервной копии в качестве данных
4
задан 24 August 2018 в 23:20
4 ответа

Prix почти имел его. Когда Вы инвертируете RewriteCond!) это не получает так %1 пусто. Два возможных решения:

Макет RewriteCond:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
RewriteRule ^/(.*)$ http://www\.%1/$1 [R=301,L]

%{HTTP_HOST} в RewriteRule:

RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^/(.*)$ http://www\.%{HTTP_HOST}/$1 [R=301,L]
3
ответ дан 3 December 2019 в 03:12
  • 1
    ^(.+)$ это поймает субдомен также, таким образом, %1 сделал бы нечетные вещи, не хороший способ пойти, то же с Вашим вторым правилом. Например, если бы пользователь ввел subdomain.domain.com, то это попыталось бы сделать subdomain.domain.com/$1 –  Prix 13 October 2010 в 22:13
  • 2
    Нет, при вводе subdomain.domain.com, это сделало бы www.subdomain.domain.com, который является точно, относительно чего просят. Я протестировал эти правила о рабочем апаче. –  Mark Wagner 13 October 2010 в 22:34
  • 3
    Спасибо, парни - Вы действительно сделали мой день! Без продвижения "/" в RewriteRule оба решения работают на меня. Так, какой предпочтен здесь, возможно, меньше "иссушения производительности"? –   14 October 2010 в 02:59
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%2/$1 [R=301,L]

! средства, если это не запускается с "www..." затем, отправляют его в www.%1 который является (.+)

1
ответ дан 3 December 2019 в 03:12
  • 1
    благодарит prix! к сожалению, это правило перенаправляет к "" изменениям значения места –   13 October 2010 в 20:05
  • 2
    советуйте... –   13 October 2010 в 20:17
  • 3
    '' перед точкой на URL, я обновляю вышеупомянутый код, но в целом это должно поймать %1 –  Prix 13 October 2010 в 20:32
  • 4
    , я добавил все это... что-то не так здесь? –   13 October 2010 в 20:35
  • 5
    Попробованный Ваша фиксация, но все еще не работает. –   13 October 2010 в 20:39

Следующее всегда работало на меня с Apache 2:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
0
ответ дан 3 December 2019 в 03:12
  • 1
    Yepp, но я искал "one-fits-it-all", правило нежесткого кодирования. То, что я действительно не понимаю, - то, что перезапись от www до non-www работает..., но не наоборот!? –   13 October 2010 в 21:37

В суммировании, чистой, протестированной версии кода:

Это работает (на меня) для перенаправления www к non-www

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Любой из них работает (на меня) для перенаправления non-www к www

RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%{HTTP_HOST}/$1 [R=301,L]

или

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%1/$1 [R=301,L]
2
ответ дан 3 December 2019 в 03:12

Теги

Похожие вопросы