#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, не использующего полное доменное имя в этом случае.