У меня есть веб-сайт, который не перенаправляет с не-www на www.
Моя конфигурация Apache выглядит следующим образом:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
Чего мне не хватает?
apache
redirect
mod-rewrite
no-www
user121196
источник
источник
.htaccess
основанного решения я предлагаю ответ, который был поставлен на диаметральный вопрос: stackoverflow.com/a/5262044/367456Ответы:
Использование движка переписывания - довольно тяжелый способ решения этой проблемы. Вот более простое решение:
И тогда у вас будет еще один
<VirtualHost>
разделServerName www.example.com
для вашей реальной конфигурации сервера. Apache автоматически сохраняет что-либо после/
использованияRedirect
директивы , что является распространенным заблуждением о том, почему этот метод не работает (хотя на самом деле он работает).источник
www.example
иexample
везде, где они появляются в образце.Redirect 301 / http://example2.com/extra/
но когда он перенаправляет, он пропускает завершающий слеш, что означает, чтоexample.com/blah
идетexample2.com/extrablah
. Любые идеи? (Apache 2.2.22)http://example.com/subdir/?lold=13666
=>http://www.example.com/subdir/?lold=13666
источник
example.com/subdi1/ws/*
пройти без www?s
к http в третьем ряду.источник
www.
вServerAlias
?Чтобы удалить
www
с вашегоURL
сайта, используйте этот код в вашем.htaccess
файле:Чтобы заставить
www
на вашем сайтеURL
использовать этот код на.htaccess
Где
YourSite.com
должен быть заменен на вашURL
.источник
Это то, что происходит с кодом выше. Первый блок виртуального хоста проверяет, является ли запрос www.example.com, и запускает ли ваш сайт в этом каталоге.
В противном случае речь идет о втором разделе виртуального хоста. Здесь все, кроме www.example.com, перенаправляется на www.example.com.
Порядок здесь имеет значение. Если вы сначала добавите вторую директиву virtualhost, это вызовет цикл перенаправления.
Это решение перенаправит любой запрос на ваш домен на www.yourdomain.com.
Ура!
источник
Это похоже на многие другие предложения с парой улучшений:
%{REQUEST_URI}
правил.Часть пути, на которую не влияют предыдущие значения,
RewriteRule
например%{REQUEST_URI}
is.источник
Это начинается с
HTTP_HOST
переменной, которая содержит только часть имени домена входящего URL (example.com
). Предполагая, что доменное имя не содержитwww.
и точно соответствует вашему доменному имени, RewriteRule вступает в игру. Шаблон^(.*)$
будет соответствовать всему вREQUEST_URI
, который является ресурсом, запрашиваемым в HTTP-запросе (foo/blah/index.html
). Он сохраняет это в обратной ссылке, которая затем используется для перезаписи URL с новым доменным именем (которое начинается сwww
).[NC]
указывает на сопоставление с шаблоном без учета регистра,[R=301]
указывает на внешнее перенаправление с использованием кода 301 (ресурс перемещен постоянно) и[L]
останавливает все дальнейшее переписывание и немедленно перенаправляет.источник
Код перенаправления для не-www => www и наоборот www => не-www. Нет жесткого кодирования доменов и схем в файле .htaccess. Таким образом, исходный домен и версия http / https будут сохранены.
APACHE 2.4 и новее
NON-WWW => WWW:
WWW => НЕ WWW:
Примечание: не работает в Apache 2.2, где% {REQUEST_SCHEME} недоступен. Для совместимости с Apache 2.2 используйте приведенный ниже код или замените% {REQUEST_SCHEME} на фиксированный http / https.
APACHE 2.2 и новее
NON-WWW => WWW:
... или более короткая версия ...
WWW => НЕ WWW:
... более короткая версия невозможна, потому что% N доступен только с последнего RewriteCond ...
источник
Я запустил это ...
Мне нужно, чтобы это было универсально для 25+ доменов на нашем новом сервере, поэтому эта директива находится в моем файле virtual.conf в теге <Directory>. (dir является родителем для всех docroots)
Мне пришлось немного взломать правило перезаписи, поскольку полный документирование проходило при сопоставлении с образцом, несмотря на то, что http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html говорит об этом только вещи после хоста и порта.
источник
Если вы используете Apache 2.4, без необходимости перезаписывать модуль apache вы можете использовать что-то вроде этого:
источник
Перенаправить домен .tld на www.
Следующие строки могут быть добавлены либо в директивах Apache, либо в файле .htaccess:
Не забудьте применить изменения apache, если вы изменяете vhost.
(основано на стандартном Drupal7 .htaccess, но должно работать во многих случаях)
источник
Это просто!
источник
Это перенаправит не только доменное имя, но и внутренние страницы. Как ...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
источник
Попробуй это:
источник
Не всегда используйте
Redirect permanent
(или почему это может вызвать проблемы в будущем)Если есть вероятность, что вы добавите субдомены позже, не используйте
redirect permanent
.Потому что, если клиент использовал поддомен, который не был зарегистрирован,
VirtualHost
он также может никогда не достичь этого поддомена, даже если он зарегистрирован позже.redirect permanent
отправляетHTTP 301 Moved Permanently
клиенту (браузеру), и многие из них кэшируют этот ответ навсегда (до тех пор, пока кэш не будет очищен [вручную]). Таким образом, использование этого субдомена всегда будет автоматически перенаправлять на www. *** без повторного запроса сервера.см. Как долго браузеры кэшируют HTTP 301?
Так что просто используйте
Redirect
Apache.org - когда не использовать mod_rewrite
Apache.org - канонические имена хостов
источник
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
проверить эту идеальную работу
источник
-Если вы размещаете несколько доменных имен (необязательно)
-Если все эти доменные имена используют https (как они должны)
-Если вы хотите, чтобы все эти доменные имена использовали www точка domainName
Это позволит избежать двунаправленного перенаправления (с http: // non www на http: // www, а затем на https: // www)
И
Вы должны изменить код перенаправления 301 на наиболее удобный
источник
У меня просто такая же проблема. Но решил с этим
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Это правило перенаправления не-www на www.
И это правило для перенаправления www на не-www
RewriteEngine On RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
См. Http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
источник
Это работает для меня:
Я использую шаблон упреждения
(?!www.domain.com)
для исключенияwww
субдомена при перенаправлении всех доменов наwww
субдомен, чтобы избежать бесконечного цикла перенаправления в Apache.источник
Код, который я использую:
источник
Если использовать вышеупомянутое решение двух
<VirtualHost *:80>
блоков с разнымиServerName
...... тогда вы должны установить
NameVirtualHost On
также .Если вы этого не сделаете, Apache не позволит себе использовать разные
ServerName
s для различения блоков, поэтому вы получите это сообщение об ошибке:... и перенаправление не происходит, или у вас бесконечный цикл перенаправления, в зависимости от того, какой блок вы ставите первым.
источник
У меня была похожая задача на WP Multisite, где правило перенаправления должно было быть общим (для любого данного домена, который я бы добавил в сеть). Я решил сначала добавить подстановочный знак в домен (припаркованный домен). Обратите внимание . после .com.
И затем я добавил следующие строки в файл .htaccess в корне моего мультисайта. Я думаю, это будет работать для любого сайта.
Надеюсь, это поможет.
пс. Если вы хотите перенаправить не с www на www, измените последнюю строку на
источник
Я обнаружил, что проще (и более полезно) использовать ServerAlias при использовании нескольких vhosts.
Это также работает с https vhosts.
источник