как перенаправить http на https плюс перенаправить index.html на другую страницу html в .htaccess вместе? - PullRequest
1 голос
/ 05 августа 2020

Я новичок в веб-хостинге, так что со мной ничего не происходит. Итак, у меня есть код в .htaccess, который перенаправляет http на https, но я также хочу добавить код, который перенаправляет страницу index.html на другую страницу html. Есть ли способ сделать и то, и другое вместе в .htaccess. Код представлен ниже.

http на https код

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

index. html на другую html код страницы

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^$ http://example.com/index.php [L,R=301]

Ответы [ 2 ]

2 голосов
/ 05 августа 2020
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^$ http://example.com/index.php [L,R=301]

Да, это внешнее перенаправление и перенаправляет с http(s)://example.com/ на http://example.com/index.php. Однако вы перенаправляетесь на HTTP, а не на HTTPS, и вы перенаправляетесь на index.php, тогда как вы указали index.html в своем вопросе. Кажется, нет необходимости проверять запрошенное имя хоста, если у вас нет нескольких доменов и, в частности, вы хотите перенаправить только один экземпляр.

Если вы не планируете реализовать HSTS, включите это перенаправление перед общим HTTP на Перенаправление HTTPS и включение канонического имени хоста в перенаправление HTTP на HTTPS.

Например:

RewriteEngine On

# Redirect / or /index.html TO /dir/index.html (HTTPS)
RewriteRule ^(index\.html)?$ https://example.com/dir/index.html [R=302,L]

# Redirect HTTP to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://example.com%{REQUEST_URI} [R=302,L]

Однако, прочитав свой связанный вопрос , внешний " перенаправление "может быть неправильным решением вашей проблемы. Похоже, вы, возможно, «неправильно» связываете файл в документе root, тогда как вы должны ссылаться на файл в подкаталоге? (На самом деле, вы должны исправить свои внутренние ссылки, если это так ...) Однако работоспособным решением может быть внутренняя перезапись запроса на желаемый URL-путь или изменение DirectoryIndex, если вы делаете ссылку на каталог root документа. Это полностью скрыто от пользователя / клиента - пользователь видит только URL-адрес A, но на самом деле вы обслуживаете URL-адрес B. Но это будет зависеть от структуры вашего сайта.

С другой стороны, внешнее перенаправление стороны, физически отправляет пользователя / браузер на URL-адрес B. Они видят как URL-адрес A (ссылка, на которую они нажимают), так и URL-адрес B (URL-адрес, на который они перенаправляются) - как и бот поисковой системы. Браузеру нужно сделать два запроса. Это потенциально медленнее для пользователей и требует больше работы на вашем сервере (не намного больше, но все же больше).

0 голосов
/ 05 августа 2020

Вы хотите сначала сделать http -> https, потому что это применимо как к исходному, так и к перенаправлению для безопасной связи.

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
    Header always set Content-Security-Policy "upgrade-insecure-requests;"

Теперь вы можете применить перенаправление к index.php

     <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteRule ^index\.php$ - [L]
     RewriteCond %{REQUEST_FILENAME} -f
     RewriteCond %{REQUEST_FILENAME} -d
     RewriteRule . /index.php [L]
     </IfModule>

Вы можете настроить -f и -d, чтобы включить ! и / или изменить тип имени файла в соответствии с вашими требованиями c.

...