Общий htaccess перенаправить www на не-www - PullRequest
471 голосов
/ 24 октября 2008

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

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

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

Ответы [ 22 ]

3 голосов
/ 19 октября 2011
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]

Для подпапки

3 голосов
/ 04 сентября 2014

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

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

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

/site/location/.htaccess 
2 голосов
/ 22 мая 2012

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

использование: 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);
        }
    }
});
2 голосов
/ 10 июля 2016
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>
1 голос
/ 18 апреля 2019

Использование .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 на =>. !!!

1 голос
/ 15 января 2017

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

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [L,R=301]
1 голос
/ 28 февраля 2011

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

RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ro
RewriteRule (.*) http://www.site.ro/$1 [R=301,L]
1 голос
/ 24 апреля 2014

Если вы заставляете 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
0 голосов
/ 05 мая 2016

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

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

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

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

...