Я искал много статей в Интернете, но это не сработало.
Наверное, потому что это странное требование. Я был бы удивлен, если бы вы могли найти какой-либо код, который вы могли бы просто скопировать/вставить, который делает это.
Однако, предполагая, что вы создаете правильный абсолютный URL-адрес для всех своих внутренних ссылок (поскольку вы не должны внутренне ссылаться на URL-адрес, который перенаправляет), тогда это относительно тривиально реализовать в .htaccess
если вы понимаете свои существующие директивы.
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
Правило перезаписи ^(.*)$ https://example.com/$1 [L,R=301]
Регулярное выражение .*
в Правило перезаписи
шаблон совпадения все. В частности, он соответствует 0 или большему числу любых символов, как это обозначено *
квантор. Он соответствует пустому URL-пути (т. е. «домашней странице») и всем непустым URL-путям (т. е. всему остальному).
Вам нужно изменить приведенное выше регулярное выражение, чтобы оно соответствовало непустому URL-пути (т.е. всему, кроме домашней страницы). И создайте другое правило (в другом направлении), которое соответствует только пустому URL-пути.
(Это использует тот факт, что mod_dir обслуживает index.php
для запросов на домашнюю страницу, а не директивы mod_rewrite, которые следуют.)
Чтобы сопоставить 1 или более (т. е. непустой URL-путь), вы можете использовать +
(плюс) квантификатор вместо *
(звездочка/звездочка).
Например:
# Перенаправить все, кроме домашней страницы (с www на без www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
Правило перезаписи ^(.+)$ https://example.com/$1 [L,R=301]
# Перенаправить только домашнюю страницу (с не-www на www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]
Вам нужно будет очистить кеш браузера перед тестированием, так как более ранняя 301 (постоянная) переадресация, которая перенаправляла домашнюю страницу с www на не-www, была кэширована браузером.
Сначала протестируйте с 302 (временной) переадресацией, чтобы избежать потенциальных проблем с кэшированием.