У меня есть сайт www.example.com
, работающий на Apache.
Возможно, кто-то попал ко мне через example.com
, или www.example.com
, или http://example.com
, или даже http://www.example.com
.
Могу ли я использовать правила перезаписи в .htaccess
, чтобы, как бы они ни попали на example.com
, URL был полностью расширен до http://www.example.com
?
Предполагая, что Apache уже принимает запросы как к субдомену www, так и к вершине домена (например, example.com
), вы можете канонизировать имя хоста на www, используя что-то вроде следующего с использованием mod_rewrite в верхней части вашего файла .htaccess
в корне документа.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Вышеупомянутый перенаправляет любой запрос формы example.com/
на http://www.example.com/
. Переменная сервера REQUEST_URI
содержит полный URL-путь, включая префикс косой черты. Любая строка запроса, которая может быть в исходном запросе, передается без изменений.
Сначала проверьте с помощью 302 (временного) перенаправления, чтобы избежать потенциальных проблем с кешированием.
Может быть, кто-то попал ко мне через
example.com
, илиwww.example.com
, илиhttp://example.com
, или дажеhttp://www.example.com
.
Примечание: example.com
и http://example.com
одинаковы - браузер просто скрывает протокол (и по умолчанию использует HTTP для большинства ] пользователей). То же самое для www.example.com
и http://www.example.com
.
ОБНОВЛЕНИЕ:
когда я только что это попробовал, URL-адрес браузера остался
example.com
Если вы еще этого не сделали, вам нужно включить .htaccess
переопределения в конфигурации сервера, иначе файл .htaccess
будет просто проигнорирован.
В соответствующем контейнере
внутри
(или в конфигурации основного сервера) вам необходимо установить AllowOverride
(по умолчанию `None ). Например:
<Directory /path/to/document-root>
Options +FollowSymLinks
Require all granted
# Enable .htaccess overrides
AllowOverride All
</Directory>
И, если вы еще этого не сделали, вам нужно включить mod_rewrite:
.htaccess
Вы можете увеличить LogLevel
(Apache 2.4+) в конфигурации сервера для вывода отладочной информации в журнал ошибок сервера. Например, в соответствующем контейнере
(или в конфигурации основного сервера):
LogLevel debug
Это устанавливает «уровень журнала» для всех модулей. Значение по умолчанию - Предупреждение об уровне журнала
. Чтобы настроить таргетинг только на конкретный модуль, такой как mod_rewrite (использованный выше), вы можете указать только этот модуль. например. Перезапись LogLevel: отладка
.
Ссылка: