Возникли проблемы с переписыванием мода не с www на www

#mod-rewrite

#переписывание мода

Вопрос:

Кто-нибудь может мне помочь с этим:

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

Что я пытаюсь сделать, так это создать правило перезаписи, которое отправляет вас на www-версию сайта, если вы пытаетесь подключиться, используя не www-версию.

Условие работает, но правила — нет, оно отправляет меня на http:// Кто-нибудь может подсказать, как я могу это исправить. Я ожидал, что $ 1 = все в приведенном выше условии между ^ и $ Спасибо

Ответ №1:

Не используйте HTTP_HOST , это зло.

Сделайте это:

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

Где %1 соответствует группировке из предыдущего RewriteCond .

Комментарии:

1. Спасибо за вашу помощь, Линус. Я пробовал это, но если я запускаю не www URL-адрес, он отправляет меня на .com . Кроме того, если % 1 соответствует группировке, что делает $ 1? Еще раз спасибо.

2. @Columbo Я добавил явное соответствие для всего %{SERVER_NAME} в своей правке. Теперь это работает. Извините за это.

3. Еще раз спасибо, это действительно решило проблему для домена самостоятельно, но если я добавлю страницу, это не так. Например. www.domain.com/page.php работает, но domain.com/page.php не выполняется. Похоже, что ИМЯ_СЕРВЕРА (.*) не определяет путь.

4. @Columbo Это был какой-то неаккуратный ответ, который я дал. Пожалуйста, посмотрите мою повторную правку.

5. Будьте осторожны, если в вашем домене и vhost включены подстановочные знаки. Собираюсь ww.blah.org перенаправит вас на www.ww.blah.org. Я не знаю ни одного rewriterule, не использующего полное доменное имя в этом случае.