У меня есть папка, в которой просто есть одностраничный html "Скоро в продаже".
Затем у меня есть несколько доменов, которые я время от времени указываю на эту папку по мере необходимости.
Просто, не так ли?
Я хочу иметь условие, при котором, если исходная запрошенная страница не была www, чтобы перейти на www (301>
ПЛЮС, если не https, чтобы перейти на https (301)
И затем перенаправьте весь трафик на https: //www.originating-domain.xzy/index.html
(302)
, цель состоит в том, чтобы это была целевая страница для многоцелевого использования.
но ВСЕГДА с 301 по https: // www
а затем 302 на index.html
У меня уже есть эти non-www на www и http на https, работающие на каждом сайте:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]
теперь я хочу добавить временное перенаправление 302 на index.html
.
или есть лучший способ сделать это полностью? вроде, так как это все временно ... 302 весь трафик для индексации Я пробовал это, но не сработало
RewriteCond %{REQUEST_URI} !.*index\.html
RewriteRule https://www.%{HTTP_HOST}/index.html [R=302,L]
RewriteCond %{REQUEST_URI} !.*index\.html Правило перезаписи https://www.%{HTTP_HOST}/index.html [R=302,L]
Есть несколько проблем с этим...
Похоже, вы полностью пропустили шаблон RewriteRule
(первый аргумент), поэтому эта директива не будет соответствовать.
Если бы это действительно совпадало, это было бы префиксом www.
субдомен еще раз . Я предполагаю, что вы помещаете это перенаправление после канонических перенаправлений (HTTP на HTTPS и без www на www) - как и должно быть. Таким образом, это приведет к перенаправлению на https://www.www.example.com/index.html
, потому что к моменту срабатывания этого перенаправления имя хоста уже является каноническим.
Условие (директива RewriteCond
) на самом деле не нужно, так как эта проверка (то, что /index.html
еще не запрошено) может быть более эффективно обрабатывается самой директивой RewriteRule
.
Например:
RewriteRule !^index\.html$ /index.html [R=302,L]
Нет необходимости включать схему+имя хоста в строку подстановки , так как вы все равно хотите перенаправить на то же самое. Если вы хотите быть явным, вы можете написать https://%{HTTP_HOST}/index.html
.
Обратите внимание, что index.html
не может ссылаться на другие локальныересурсы (изображения, CSS, JavaScript и т. д.), поскольку эти запросы также будут перенаправлены. Чтобы разрешить доступ к локальным ресурсам, вам нужно добавить пару условий, чтобы исключить запросы на статические ресурсы.
RewriteCond %{REQUEST_URI} !.\.(jpg|png|webp|css|js)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.html$ /index.html [R=302,L]
Также можно разместить эти ресурсы на внешнем домене.(Или в подкаталоге и исключить весь подкаталог.)
Однако, если вообще выбрать «перенаправление», я бы, возможно, перенаправил на файл с более уникальным/значащим именем, например. /coming-soon.html
. Проблема с использованием /index.html
заключается в том, что вы позже захотите использовать другой контент по этому URL-адресу, и он был кэширован (по какой-либо причине). Хотя /coming-soon.html
, вероятно, должно быть "noindex".
ОДНАКО, может быть предпочтительнее вообще не перенаправлять и вместо этого обслуживать временныйответ «503 Служба недоступна». См. мой ответна следующий вопрос в стеке веб-мастеров для получения дополнительной информации об этом:
В стороне:
RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} выкл. Правило перезаписи ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]
Вы находитесь за интерфейсным прокси-сервером, который управляет соединением SSL?
Если да, то все в порядке, хотя второе условие, проверяющее серверную HTTPS
переменную, является излишним. Однако, если вы неза прокси-сервером SSL, то эти директивы уязвимы для обхода (т. е. пользователь не перенаправляется на HTTPS), если X-Forwarded-Proto: https
заголовок вводится в запрос.
Хорошо, это работает так, как я хочу. Но можно ли их как-то совместить?
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_URI} !.*coming-soon\.html [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/coming-soon.html [R=302,L]