1

Клиент попросил меня установить tls-сертификат на своем веб-сервере и сделать перенаправление http-> https. После установки сертификата и настройки правил перезаписи все выглядит нормально:

    RewriteEngine on

    RewriteCond %{HTTP_HOST} !^www\. [NC] [OR]
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]


############################################
## rewrite API2 calls to api.php (by now it is REST only)

    RewriteRule ^api/rest api.php?type=rest [QSA,L]

############################################
## workaround for HTTP authorization
## in CGI environment

    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

############################################
## TRACE and TRACK HTTP methods disabled to prevent XSS attacks

    RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
    RewriteRule .* - [L,R=405]
<IfModule mod_setenvif.c>
    <IfModule mod_headers.c>

        ############################################
        # X-Content-Type-Options: nosniff disable content-type sniffing on some browsers.
        Header set X-Content-Type-Options: nosniff

        ############################################
        # This header forces to enables the Cross-site scripting (XSS) filter in browsers (if disabled)
        BrowserMatch \bMSIE\s8 ie8
        Header set X-XSS-Protection: "1; mode=block" env=!ie8

    </IfModule>
</IfModule>

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

НО: перед установкой перенаправления http-> https было установлено задание cron через панель webmin, которое выглядело так:

wget -O /dev/null http://example.com/some_api

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

Я обнаружил, что приведенный выше вызов запускает процесс синхронизации (данные о продукте) между магазином (magento) и базой данных mongo, установленной в системе.

Я попытался адаптировать вышеуказанный вызов к перенаправлению http-> https, используя следующую новую командную строку:

wget -O /dev/null --ca-directory /home/user https://www.example.com/some_api

но теперь синхронизация больше не работает (мне пришлось добавить "www" к первоначально используемому имени хоста, так как в противном случае запрос зависал целую вечность).

При запуске вручную из webmin я получаю следующий вывод:

--2018-09-28 18:00:32--  https://www.example.com/some_api
Resolving www.example.com (www.example.com)... 46.xxx.yyy.zzz
Connecting to www.example.com (www.example.com)|46.xxx.yyy.zzz|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://example.com/ [following]
--2018-09-28 18:00:32--  https://example.com/
Resolving example.com (example.com)... 46.xxx.yyy.zzz
Connecting to example.com (example.com)|46.xxx.yyy.zzz|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `/dev/null'

     0K .......... .......... .......... .......... .......... 57.4M
    50K .......... .......... .......... ........              4.50M=0.009s

2018-09-28 18:00:33 (9.40 MB/s) - `/dev/null' saved [90479]

Очевидно, что запрос перенаправляется в каталог DocumentRoot (содержащий файл index.php), но синхронизация не выполняется.

С этого момента я не знаю, как действовать дальше, поскольку мои ноу-хау об API и их поведении в указанных условиях недостаточны. Возможно, правильной переписки URL уже будет достаточно.

Итак, мой вопрос: как мне снова заставить работать вызов API?

0