Общий htaccess перенаправить www на не-www

Я бы хотел перенаправить www.example.com в example.com

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

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

462 голоса | спросил deepwell 24 +04002008-10-24T22:19:38+04:00312008bEurope/MoscowFri, 24 Oct 2008 22:19:38 +0400 2008, 22:19:38

21 ответ


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

То же, что и Michael's , за исключением того, что этот работает: P

ответил 13 AM000000100000002031 2009, 10:05:20
0

Но если нам нужно сделать это для отдельных 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]
ответил Andron 19 MaramFri, 19 Mar 2010 11:51:48 +03002010-03-19T11:51:48+03:0011 2010, 11:51:48
0

Перенаправьте не 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]
ответил Dmitriy 10 MarpmThu, 10 Mar 2011 18:42:10 +03002011-03-10T18:42:10+03:0006 2011, 18:42:10
0

Если вы хотите сделать это в файле httpd.conf, вы можете сделать это без mod_rewrite (и, очевидно, это лучше для производительности).

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

Я получил такой ответ здесь: https://serverfault.com/questions /120488 /переадресовать-URL-в-апаш-VirtualHost /120507 # 120507

ответил William Denniss 10 MaramThu, 10 Mar 2011 05:31:27 +03002011-03-10T05:31:27+03:0005 2011, 05:31:27
0

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

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

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

Ниже приведены правила перенаправления URL-адреса без www на www:

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

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

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

ответил Salman A 28 PMpSat, 28 Apr 2012 14:21:02 +040021Saturday 2012, 14:21:02
0
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R]

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

ответил Michael Cramer 25 +04002008-10-25T00:00:06+04:00312008bEurope/MoscowSat, 25 Oct 2008 00:00:06 +0400 2008, 00:00:06
0

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

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

Если хост начинается с www, мы помещаем весь хост в начало URL, а затем снимаем "www."

ответил Greg 24 +04002008-10-24T22:26:48+04:00312008bEurope/MoscowFri, 24 Oct 2008 22:26:48 +0400 2008, 22:26:48
0

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

RewriteEngine On

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

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

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

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

ответил Htaccess Redirect 17 Jpm1000000pmMon, 17 Jan 2011 19:06:28 +030011 2011, 19:06:28
0

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

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

  1. Generic. Не требуется информация о домене.
  2. Форсирует WWW на основном домене: www.domain.com
  3. Удаляет WWW на поддоменах: sub.domain.com
  4. Сохраняет статус HTTP /HTTPS.
  5. Разрешает использование отдельных файлов cookie для домена /поддоменов

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

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]
ответил Gregor Macgregor 9 FebruaryEurope/MoscowbTue, 09 Feb 2016 19:43:06 +0300000000pmTue, 09 Feb 2016 19:43:06 +030016 2016, 19:43:06
0
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]

Для подпапки

ответил pelajar 19 +04002011-10-19T18:36:17+04:00312011bEurope/MoscowWed, 19 Oct 2011 18:36:17 +0400 2011, 18:36:17
0

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

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

Не забудьте добавить это в следующий файл

/site/location/.htaccess 
ответил Rick 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 04 Sep 2014 22:23:19 +0400 2014, 22:23:19
0

с 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]
ответил Rajith Ramachandran 3 MarpmTue, 03 Mar 2015 14:50:52 +03002015-03-03T14:50:52+03:0002 2015, 14:50:52
0

use: 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);
        }
    }
});
ответил antimalwareprogram 2 AM00000090000000331 2017, 09:37:03
0

Я использовал вышеупомянутое правило для 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]
ответил Luke 22 Maypm12 2012, 12:10:11
0
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]

Это перенаправляет Non ssl

к

А SSL

к

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

<if "%{HTTP_HOST} =='www.example.com'">
Redirect / http://example.com/
</if>
ответил starkeen 10 J000000Sunday16 2016, 11:12:07
0

Единственный способ заставить его работать ...

RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ro
RewriteRule (.*) http://www.site.ro/$1 [R=301,L]
ответил sulfy 28 FebruaryEurope/MoscowbMon, 28 Feb 2011 21:21:34 +0300000000pmMon, 28 Feb 2011 21:21:34 +030011 2011, 21:21:34
0

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

RewriteEngine On
RewriteBase /

### Force WWW ###

RewriteCond% {HTTP_HOST} ^ пример \ .com
RewriteRule (. *) Http://www.example.com/$1 [R = 301, L]

## Force SSL ###

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

## Блокировка IP-адресов ###
Заказать Запретить, Разрешить
Запретить с 256.251.0.139
Запретить с 199.127.0.259
ответил mystique 24 PMpThu, 24 Apr 2014 19:38:58 +040038Thursday 2014, 19:38:58
0

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

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [L,R=301]
ответил luky 15 Jpm1000000pmSun, 15 Jan 2017 18:17:03 +030017 2017, 18:17:03
0

Я не уверен, почему вы хотите удалить 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 в исходную среду.

ответил local 16 FriEurope/Moscow2011-12-16T22:07:11+04:00Europe/Moscow12bEurope/MoscowFri, 16 Dec 2011 22:07:11 +0400 2011, 22:07:11
0

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

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

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

  

Параметр NoCase для шаблона без регулярных выражений '-f' не поддерживается и будет игнорироваться

ответил William Entriken 5 Maypm16 2016, 19:07:53
0

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

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
ответил Chirag Parekh 5 Maypm15 2015, 15:29:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132