Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Но если нам нужно сделать это для отдельных 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]

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

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

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

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

Вот правила перенаправления 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

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

RewriteCond захватывает все в переменной HTTP_HOST после www. и сохраняет его в % 1 .

RewriteRule захватывает URL-адрес без начального / и сохраняет его в $ 1 .

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

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

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

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

RewriteEngine On

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

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

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

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

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

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

<Ол>
  • Generic. Не требуется информация о домене.
  • Форсирует WWW в основном домене: www.domain.com
  • Удаляет WWW на поддоменах: sub.domain.com
  • Сохраняет статус HTTP / HTTPS.
  • Разрешает использование отдельных файлов 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]
    
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]
    

    Для подпапки

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

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

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

    /site/location/.htaccess 
    

    с 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]
    

    Я использовал вышеупомянутое правило для 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]
    
    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

    к

    И ssl

    к

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

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

    использовать: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({
        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);
            }
        }
    });
    

    Использование .htaccess для перенаправления на www или без www:

    Просто поместите следующие строки кода в ваш основной корневой файл .htaccess. В обоих случаях просто замените domain.com своим собственным именем хоста.

    Перенаправить на www

    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{HTTP_HOST} ^domain\.com [NC]
      RewriteRule ^(.*)$ http://wwwDOTdomainDOtcom/$1 [L,R=301]
    </IfModule>
    

    Перенаправить на сайт без www

    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
      RewriteRule ^(.*)$ http://domainDOTcom/$1 [L,R=301]
    </IfModule>
    

    измените DOT на = > , !!!

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

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

    Если вы заставляете www. в URL или принудительном протоколе ssl, попробуйте использовать возможные варианты в файле 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
    

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

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

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

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

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

    Единственное изменение по сравнению с Michael состоит в удалении [NC] , который производит & Quot; AH00665 & Quot; Ошибка:

      

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

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

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.com
    RewriteRule (.*) http://www.example.com/$1 [R=301,L]
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top