Множественные условные перенаправления в одном .htaccess (Landing Page)

У меня есть папка, в которой просто есть одностраничный 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]
0
задан 1 September 2021 в 18:33
2 ответа
 RewriteCond %{REQUEST_URI} !.*index\.html
Правило перезаписи https://www.%{HTTP_HOST}/index.html [R=302,L]

Есть несколько проблем с этим...

  1. Похоже, вы полностью пропустили шаблон RewriteRule(первый аргумент), поэтому эта директива не будет соответствовать.

  2. Если бы это действительно совпадало, это было бы префиксом 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заголовок вводится в запрос.

0
ответ дан 3 September 2021 в 12:24

Хорошо, это работает так, как я хочу. Но можно ли их как-то совместить?

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]
0
ответ дан 7 September 2021 в 08:04

Теги

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