Как настроить правило .htaccess, чтобы разрешить доступ только для чтения всем пользователям определенного графического файла? - PullRequest
0 голосов
/ 28 сентября 2019

В моем веб-приложении, написанном на php и использующем Symfony v2.8, у меня есть страница контактов, которая при отправке на сервер создает два электронных письма, которые должны содержать графическое изображение, но когда это графическое изображение на самом деле включено, я получаюследующая ошибка:

Unable to open file for reading 
[https://fake.net/Resources/public/images/landing_page/mypic.png]
500 Internal Server Error - Swift_IoException

Stack Trace
in vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php
at line 144  -
    if (!isset($this->_reader)) {
        $pointer = @fopen($this->_path, 'rb');
        if (!$pointer) {
            throw new Swift_IoException(
                'Unable to open file for reading ['.$this->_path.']'
            );
        }

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

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

GET https://fake.net/Resources/public/images/landing_page/mypic.png
500 (Internal Server Error)

Вот строки, которые я добавил в конец моего файла .htaccess:

# Allow access of the mypic logo for emails

<files mypic.png>
    order allow,deny
    allow from all
</files>

Перед приведенным выше утверждением выполняются следующиестрока, которая всегда была в файле .htaccess:

<IfModule mod_rewrite.c>

  RewriteEngine On

  <If "%{HTTP_REFERER} != ''">

    # Hot link prevention for css|gif}htm|html|jpg|js|mp3|mp4|php|png files
    # from any other domain than %{HTTP_HOST}
    # See http://tltech.com/info/referrer-htaccess/

    RewriteCond %{HTTP_REFERER} !^.*$ [NC]
    RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.* [NC]
    RewriteRule .*\.(css|gif}htm|html|jpg|js|mp3|mp4|php|png)$ - [NC,F]

  </If>

</IfModule>

Хотя ничто из этого не ограничивает доступ к файлу только для чтения, для разрешения файла, установленного на 664, это делается. Может ли это .htaccess сделать принудительный доступ только для чтения при разрешении файла 666?

Похоже, что оператор предоставляет доступ к любому файлу с этимимя, а не только один конкретный файл, который я хочу иметь неограниченный доступ только для чтения, который находится в каталоге web \ Resources \ public \ images \ landing_page.Однако, когда я пытаюсь использовать относительный или абсолютный путь, создание электронной почты все еще взрывается с той же ошибкой. Пожалуйста, обращайтесь к этому в любом предложенном решении.

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

Мне сказали переместить файл из области, контролируемойФайл .htaccess, но весь мой сайт находится под контролем .htaccess, поэтому перемещение графического файла в каталог над веб-каталогом сайта сделает графический файл за рамками моего веб-сайта, поэтому также недоступен.

...