2008-10-24 2 views
432

Я хотел был бы перенаправить www.example.com в example.com. Следующий код Htaccess делает это произошло:Общий htaccess перенаправить www на не-www

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

Но есть способ сделать это в общем виде, без жесткого кодирования имени домена?

+60

Это важно иметь в виду, что если вы не используете WWW (или какой-либо другой субдомен), то все куки будут представлены на любой подобласти драм вы не сможете иметь субдомен без cookie для обслуживания статического контента, тем самым уменьшая количество данных, отправляемых туда и обратно между браузером и сервером. Что-то, о чем позже можно было бы пожалеть: http://twitter.com/codinghorror/statuses/1637428313 – 2009-04-28 23:44:41

+1

Еще одна вещь, которую следует учитывать, убедитесь, что вы устанавливаете каноническое имя без www на своих страницах, чтобы избежать возможного дублирования контента ,Также, если у вас есть абсолютные URL-адреса в ваших ссылках, убедитесь, что они все не являются www. – 2012-12-06 00:42:04

+0

На мой взгляд, лучше сохранить явное перенаправление, особенно при копировании конфигурации для другого домена, для чего может потребоваться другая настройка (в некоторых случаях домен www лучше) http://www.weboptimizer.ch/2014/01/redirection -www/ – snowflake 2014-03-11 09:51:17

ответ

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

То же Michael's кроме этого работает: P

+14

Если это не сработает, вам, вероятно, не хватает предшественника «RewriteEngine On», чтобы он работал. – hendry 2010-05-25 09:02:34

7

Попробуйте это:

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

Если хост начинается с WWW, мы наклеить целый на начало URL, а затем снять «WWW.»

+0

RoBorg, к сожалению, ваши настройки не работают, если я попробую: http://www.example.com/hello/world В конце концов я здесь: http://example.com/hello/world/world Мне также пришлось добавить косую черту после% {HTTP_POST} в First RewriteRule – deepwell 2008-10-27 23:12:43

+1

Это отлично работает для меня (на Apache 2) – Greg 2008-11-08 09:23:30

+1

Я использую Apache/2.2.9 (Unix). Он работает для www.website, который перенаправляет на сайт Но следующее: http://www.website/test -> идет в: Http: //www.websitetest/ я это исправил, добавив еще один/ Вторая ошибка: http://www.website/test/n идет по адресу http: //www.websitetest/n/n – deepwell 2008-11-12 22:36:51

11
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^/(.*)$ http://%1/$1 [R] 

RewriteCond захватывает все в переменной HTTP_HOST после "WWW." и сохраняет его в% 1. RewriteRule захватывает URL-адрес (sans leading «/») и сохраняет его в $ 1.

89

Но если мы должны сделать это для отдельного HTTP и HTTPS:

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

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 
6

Там может быть много дезинформации там о htaccess перенаправления, я нахожу. Прежде всего, убедитесь, что ваш сайт работает в Unix с помощью Apache, а не на хосте Windows, если вы ожидаете, что этот код будет работать.

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

(Убедитесь, что нет ни одной строки пробелов между каждой строкой текста, хотя,. Я добавил дополнительное пространство между линиями, так что делает хорошо в этом окне)

Это один фрагмент коды которые могут быть использованы для направления www-версии вашего сайта в версию http: //. Существуют и другие аналогичные коды, которые также могут использоваться.

1

Единственный способ, которым я получил его на работу ...

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^site\.ro 
RewriteRule (.*) http://www.site.ro/$1 [R=301,L] 
68

Перенаправление не-WWW к WWW (как: HTTP + HTTPS)

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

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

Для вложенной

1

Я не уверен, почему u хочу удалить www. Но обратная версия будет:

# non-www.* -> www.*, if subdomain exist, wont work 
RewriteCond %{HTTP_HOST} ^whattimein\.com 
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L] 

И преимущество этого сценария: , если у вас что-то вроде test.whattimein.com или любых других (окружающих сред для разработки/тестирования) это обыкновение перенаправлять U к оригиналу окружающая среда.

30

Вот правила для перенаправления WWW URL в не-WWW:

######################### 
# redirect www to no-www 
######################### 

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

Вот правила для перенаправления не-WWW URL для WWW:

######################### 
# redirect no-www to www 
######################### 

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

Обратите внимание, что я использовал NE флаг, предотвращающий переход apache из строки запроса. Без этого флага, апач будет изменить требуемый URL http://www.example.com/?foo%20bar для http://www.example.com/?foo%2250bar

2

Я использовал выше правила FWD WWW ни к WWW, и она отлично работает на домашней страницу, однако на внутренних страницах они направляют /index.php

Я нашел это другое правило в файле .htaccess, который вызывает это, но не уверен, что с ним делать. Любые предложения были бы замечательными:

############################################ 
## always send 404 on missing files in these folders 

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/ 

############################################ 
## never rewrite for existing files, directories and links 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-l 

############################################ 
## rewrite everything else to index.php 

    RewriteRule .* index.php [L] 
1

Если вы форсируете www. в URL или форсирование Ssl prototcol, а затем попытаться использовать возможные изменения в файле .htaccess, например:

 
RewriteEngine On 
RewriteBase/

### Force WWW ### 

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

## Force SSL ### 

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L] 

## Block IP's ### 
Order Deny,Allow 
Deny from 256.251.0.139 
Deny from 199.127.0.259 
3

Для тех, которые должны иметь доступ к всему сайту БЕЗ «WWW» приставки.

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

Mare, что Вы добавляете это к следующему файлу

/site/location/.htaccess 
3

WWW к не WWW с HTTPS

RewriteEngine on 

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

RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
-1

Привет вы можете использовать следующие правила в файл Htaccess:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example.com 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 
5

Полный общий WWW-обработчик, http/https

Я не нашел полного ответа. Я использую это для включения WWW.

  1. Generic. Не требуется информация о домене.
  2. силы WWW на первичном домене: www.domain.com
  3. Удаляет WWW на поддомены: sub.domain.com
  4. Пресервы HTTP/HTTPS статус.
  5. Позволяет отдельные куки для домена/поддоменов

Пожалуйста, дайте мне знать, как это работает, или если я оставил лазейку.

RewriteEngine On 
RewriteBase/

# Force WWW. when no subdomain in host 
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC] 
RewriteCond %{HTTPS}s ^on(s)|off [NC] 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

# Remove WWW. when subdomain(s) in host  
RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)|off [NC] 
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC] 
RewriteRule^%1%3%4%5%{REQUEST_URI} [R=301,L] 
0

Это обновление для работы с Apache 2.4:

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

Единственное изменение против Michael's является удаление [NC], который производит ошибку "AH00665":

NoCase option for non-regex pattern '-f' is not supported and will be ignored

1
RewriteEngine on 
# if host value starts with "www." 
RewriteCond %{HTTP_HOST} ^www\. 
# redirect the request to "non-www" 
RewriteRule^http://example.com%{REQUEST_URI} [NE,L,R] 

Если вы хотите удалить www на обоих http и https, использовать следующее:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www\. 
RewriteCond %{HTTPS}s ^on(s)|offs 
RewriteRule^http%1://example.com%{REQUEST_URI} [NE,L,R] 

Это перенаправляет не защищенных

в

И SSL

в

на апача 2.4.* вы можете сделать это с помощью директивы в Redirect с if,

<if "%{HTTP_HOST} =='www.example.com'"> 
Redirect/http://example.com/ 
</if> 
0

Выбранный ответ и многие другие решения здесь отбросили часть URL-адреса после /, поэтому в основном он всегда перенаправляется в основной домен, по крайней мере для меня. Поэтому я добавляю рабочий образец, соблюдая полный путь после слэша.

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

использование: Javascript/JQuery

// similar behavior as an HTTP redirect 
window.location.replace("http://www.stackoverflow.com"); 
// similar behavior as clicking on a link 
window.location.href = "http://stackoverflow.com"; 

Или .htaccess:

RewriteEngine On 
RewriteBase/
Rewritecond %{HTTP_HOST} ^www\.yoursite\.com$ [NC] 
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L] 

и метод PHP:

$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 

if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') { 
    header('Location: '.$protocol.'www.'.$_SERVER ['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']); 
    exit; 
} 

Ajax

$.ajax({ 
    type: "POST", 
    url: reqUrl, 
    data: reqBody, 
    dataType: "json", 
    success: function(data, textStatus) { 
     if (data.redirect) { 
      // data.redirect contains the string URL to redirect to 
      window.location.href = data.redirect; 
     } 
     else { 
      // data.form contains the HTML for the replacement form 
      $("#myform").replaceWith(data.form); 
     } 
    } 
}); 
Смежные вопросы