удалить одну ссылку из HTTPS в моем файле .htaccess - PullRequest
0 голосов
/ 06 июня 2018

Я заставляю весь сайт работать через HTTPS.Затем я продолжаю форсировать www и обрабатывать страницы через index.php со следующим в моем .htaccess файле.

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On

  RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*)$ - [env=proto:http]
  RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [OR]
  RewriteCond %{HTTPS} =on
  RewriteRule ^(.*)$ - [env=proto:https]
</IfModule>

Тогда ниже этого пути ...

<IfModule mod_rewrite.c>
    #Redirect non-www to www
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ %{ENV:proto}://www.%{HTTP_HOST}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Моя проблема в том, что мне нужно разрешить страницам, например с PRD в URI, проходить через HTTP, а НЕ HTTPS.

Итак http://www.localsite.com/index.php?PRD=123

Не будет переходить на https, в то время как любая другая ссылка будет.


* РЕДАКТИРОВАТЬ *


Я попытаюсь уточнить немного больше.Я пытался перехватить переадресацию / переписать раньше всех остальных, но он по-прежнему переходит между следующим: http://www.local.com/index.php?PRD=123 https://www.local.com/index.php?PRD=123

Это говорит мне, что это ловит его, но по какой-то причине второй набор правилперенаправляют еще тоже.

Я разместил следующее (я оставляю закомментированные другие попытки на случай, если они будут лучше?) Над первыми двумя, включил двигатель и переместил опции с этим.

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    RewriteCond %{QUERY_STRING} ^PRD=([0-9]+) [NC]
    #RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
    #RewriteRule ^ http://%{HTTP_HOST}/$1 [R=301,L]
    #RewriteRule ^(.*)$ http://%{HTTP_HOST}/index.php$1 [R=301,L]
    RewriteRule ^ http://%{HTTP_HOST}/index.php$1 [R=301,L]
</IfModule>

Я также попытался поместить все в один блок, используя это:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    #Redirect non-www to www
    RewriteCond %{HTTP_HOST} ^local.com [NC]
    RewriteRule ^(.*)$ http://www.local.com/$1 [L,NC]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]

    #Redirect singular segments first
    RewriteCond %{QUERY_STRING} ^PRD=([0-9]+) [NC]
    RewriteRule ^(.*)$ http://www.local.com/$1 [L]
</IfModule>

1 Ответ

0 голосов
/ 06 июня 2018

Вы должны использовать условие перезаписи для строки запроса, в которой вы устанавливаете перенаправление https, попробуйте следующее:

RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} !^PRD=(\d+)
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
...