htaccess файл со сложными условиями - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть сложное правило переписывания модов, которое мне нужно для работы.Ситуация такова, что у меня есть клиент, чей домен использует HTTPS, но в определенном разделе должен быть HTTP для работы веб-сокетов.Что мне нужно сделать, это следующее: Если в URL-адресе есть строка '/ view-auction /', а в URL-адресе нет / login /, то он должен обслуживать HTTP.Еще для этого нужен сервер HTTPS.Вот что у меня есть

  # for /view-auctions/ enforce http
  RewriteCond %{HTTPS} on
  RewriteCond %{THE_REQUEST} /view-auctions/ [NC]
  RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

  # except for /view-auctions/ enforce https
  RewriteCond %{HTTPS} off
  RewriteCond %{THE_REQUEST} /view-auctions/ [NC]
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Это работает хорошо, за исключением того, что есть URL, в котором одновременно указаны '/ login /' '/ view-auction /' в URL, когда они оба появляютсяв URL это должен быть HTTPS, а не HTTP.

Я просмотрел весь Google и здесь на stackoverflow, но до сих пор я не нашел разумного способа добиться этого.Конечно, мое понимание файлов htaccess находится на начальном уровне.

Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Таким образом, после некоторого возни и прочтения документации, я понял.Я даю ответ, чтобы помочь другим в подобных ситуациях, и, надеюсь, немного яснее для тех, кто сталкивается с похожими проблемами.

Одна из главных вещей, которые мне показались наиболее запутанными, - это понимание общей логики и управляющих структур.используется в файлах htaccess.Первоначально я думал, что мне понадобится заявление.Что я понял, так это то, что я слишком усложнил ситуацию.

По большей части файлы htaccess обрабатываются сверху вниз и следуют директивам в том порядке, в котором они появляются в файле.Помните, что это означает, что ВЫ МОЖЕТЕ случайно отменить предыдущую декларацию, если не будете осторожны.Решением было добавить еще одну строку ниже третьей строки

RewriteCond %{THE_REQUEST} !/login/ [NC]

Так это выглядит так:

  # for /view-auctions/ enforce http
  RewriteCond %{HTTPS} on
  RewriteCond %{THE_REQUEST} /view-auctions/ [NC]
  RewriteCond %{THE_REQUEST} !/login/ [NC]
  RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

  # except for /view-auctions/ enforce https
  RewriteCond %{HTTPS} off
  RewriteCond %{THE_REQUEST} /view-auctions/ [NC]
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Из-за способа, которым предыдущий разработчик создал систему, а клиент хотел использоватьСертификаты SSL Мне нужно было найти способ разрешить всем URL-адресам '/ view-auction /' отображать HTTP, чтобы веб-сокеты все еще работали.Затем я должен был убедиться, что IF '/ login /' AND '/ view-auction /' был в URL-адресе, по которому я обслуживал его по HTTPS-соединению.

Поэтому я сначала проверил, есть ли '/view-auction / находится в URL, затем я проверяю, чтобы убедиться, что «/ login /» НЕ находится в URL.Таким образом, до тех пор, пока '/ login /' НЕ в URL, URL-адреса '/ view-auction /' будут продолжать функционировать по HTTP.

Допустим, я не буду объяснять это лучшим образом, так как яв своем ОП сказал, что я в лучшем случае новичок в работе с файлами htaccess.

...