Почему чистые URL-адреса не работают при перенаправлении на https?

Я добавил несколько строк в свой файл htacess для перенаправления всех HTTP-запросов на https. Теперь, когда я ввожу URL-адрес, например: http://example.com/frames/view/4701362, он перенаправляет на: https://example.com/index.php?q=frames/view/4701362. Я могу перейти на страницу вручную: https://example.com/frames/view/4701362 и URL не меняется.

У меня настроены чистые URL

Очистить конфигурацию URL

Htaccess-файл

<IfModule mod_rewrite.c>
  RewriteEngine on

  #some more stuff here, unrelated 

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

Изменить: я попытался изменить строку Drupal index.php?q= и строки https, подобные этой...

  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Но тогда мой сайт не загружался должным образом и сказал, что страница не найдена даже на главной странице.


person AllisonC    schedule 11.06.2015    source источник
comment
Похоже, он делает именно то, что говорят ваши правила. Вы хотите, чтобы он вел себя по-другому?   -  person nobody    schedule 11.06.2015
comment
Если я наберу _http://example.com/frames, я хочу, чтобы он перенаправлялся на _https://example.com/frames, а НЕ на _https://example.com/index.php?q=frames (игнорируйте символы подчеркивания)   -  person AllisonC    schedule 11.06.2015
comment
Первое правило перезаписи отвечает за это изменение, а второе — за переключение HTTPS. Похоже, вам нужен только второй, поэтому попробуйте исключить первый.   -  person nobody    schedule 11.06.2015
comment
Я думаю, что это то, что Drupal помещает туда   -  person AllisonC    schedule 11.06.2015
comment
Я действительно думаю, что его нужно переключить... Сначала перенаправить HTTPS, а затем переписать на index.php   -  person Mike Rockétt    schedule 11.06.2015
comment
Я попробовал это (см. Мое редактирование выше), но затем я получил страницу, не найденную на всем моем сайте (для любой страницы)   -  person AllisonC    schedule 11.06.2015
comment
Пожалуйста, проверьте инспектор вашего браузера (вкладка «Сеть» в Chrome), чтобы увидеть, какие перенаправления происходят. (Обязательно выберите «Сохранить журнал».)   -  person Mike Rockétt    schedule 11.06.2015
comment
До изменения файла htaccess сетевой трафик выглядел следующим образом: _http://example.com/frames/ Ответ: Не удалось загрузить данные ответа _https://example.com/index.php?q=frames Ответ: Страница загружен. После изменения файла htacess, чтобы сначала поставить https, я получил только один запрос: _http://example/frames/ Ответ: Страница не найдена (игнорируйте символы подчеркивания)   -  person AllisonC    schedule 11.06.2015
comment
Хорошо, оказывается, вы были очень близки к правильному ответу @MikeRockett, мне просто нужно было добавить [L,R=301] в RewriteRule для https: RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI } [Л,П=301]   -  person AllisonC    schedule 11.06.2015


Ответы (1)


Благодаря @MikeRockett выше я смог понять это. В дополнение к его предложению мне пришлось добавить [L,R=301] в строку RewriteRule.

<IfModule mod_rewrite.c>
  RewriteEngine on

  #some more stuff here, unrelated 

  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]  

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

</IfModule>
person AllisonC    schedule 11.06.2015
comment
Действительно - это правильно. Хотя я думаю, что требовался только флаг L, поскольку перенаправление подразумевается указанием полного URL-адреса. - person Mike Rockétt; 11.06.2015