Как перенаправить не-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]