Как заполнить заголовок URL в .htaccess

У меня есть сайт www.example.com, работающий на Apache.

Возможно, кто-то попал ко мне через example.com, или www.example.com, или http://example.com, или даже http://www.example.com.

Могу ли я использовать правила перезаписи в .htaccess, чтобы, как бы они ни попали на example.com, URL был полностью расширен до http://www.example.com?

1
задан 5 May 2021 в 21:25

1 ответ

Предполагая, что 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: отладка .

Ссылка:

0
ответ дан 7 May 2021 в 17:39

Другие вопросы по тегам:

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