Как перенаправить не-www на www без жесткого кодирования с использованием.htaccess?
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
... вызывает совершенное, не жесткое перенаправление 301 с "www на non-www", как будет выглядеть прямо противоположное?
РЕДАКТИРОВАТЬ:
Согласно сообщению Prix, я изменил .htaccess файл к следующему:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
</IfModule>
Как уже упоминалось, это перенаправляет на http://www./ к несчастью. Кто может помочь?
4 ответа
Решение
У Прикс почти это было. Когда вы отрицаете 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]
В итоге, чистая, проверенная версия кода:
Это работает (для меня), чтобы перенаправить www на не-www
RewriteEngine On
RewriteCond% {HTTPS}! = Вкл
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ Http://%1/$1 [R=301,L]Любая из этих работ (для меня) перенаправить не-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]
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%2/$1 [R=301,L]
! означает, что если он не начинается с "www...", то отправьте его на www.%1 какой (.+)
Следующее всегда работало для меня с Apache 2:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]