Я хочу перенаправить все мои внутренние страницы (например: example.com/about
) на их версию без www, но я хочу, чтобы моя домашняя страница ( https://example.com
) перенаправляла на ее версию с www ( https://www.example.com
).
Я просмотрел много статей в интернете, но ничего не помогло.
Если задать оба правила, то внутренние страницы будут нормально перенаправляться, но домашняя страница зациклится.
Я не умею писать код, поэтому у меня к вам просьба написать код, который я должен вставить в свой .htaccess
файл.
В настоящее время я настроил перенаправление всех страниц на их версии без www (даже на домашнюю страницу) с помощью следующего кода:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>
# BEGIN Sitepad
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END Sitepad
решение1
Я просмотрел много статей в интернете, но ничего не помогло.
Вероятно, потому что это странное требование. Я был бы удивлен, если бы вы могли найти какой-либо код, который вы могли бы просто скопировать/вставить, и который делает это.
Однако, если предположить, что вы создаете правильный абсолютный URL для всех внутренних ссылок (поскольку вы не должны ссылаться на URL, который перенаправляет), то это относительно просто реализовать, .htaccess
если вы понимаете существующие директивы.
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
Регулярное выражение .*
вRewriteRule
шаблонМатчивсе. В частности, он соответствует 0 или более любым символам, как указано квантификатором *
. Он соответствует пустому URL-пути (т. е. "домашней странице") и каждому непустому URL-пути (т. е. всему остальному).
Вам нужно изменить указанное выше регулярное выражение так, чтобы оно соответствовало непустому URL-пути (т. е. всему, кроме домашней страницы). И создать другое правило (в другом направлении), которое соответствует только пустому URL-пути.
(Здесь используется тот факт, что mod_dir обслуживает index.php
запросы к домашней странице, а не следующие за ним директивы mod_rewrite.)
Чтобы сопоставить 1 или более (т. е. непустой URL-путь), можно использовать +
квантификатор (плюс) вместо *
(звездочка/звездочка).
Например:
# Redirect everything except the homepage (from www to non-www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.+)$ https://example.com/$1 [L,R=301]
# Redirect the homepage only (from non-www to www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]
Перед тестированием вам необходимо очистить кэш браузера, поскольку предыдущая (постоянная) переадресация 301, которая перенаправляла домашнюю страницу с www на страницу без www, была кэширована браузером.
Сначала протестируйте перенаправления 302 (временные), чтобы избежать потенциальных проблем с кэшированием.