За последние 24 часа нас посетили 22647 программистов и 1269 роботов. Сейчас ищут 770 программистов ...

Как загрузить файл из директории по любому имени обращения к файлу?

Тема в разделе "PHP для новичков", создана пользователем 118_64, 27 окт 2020.

Метки:
  1. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    Добрый день!

    Есть файл, загрузка которого осуществляется по ссылке http://localhost/files/default.txt
    Задача: сделать доступной загрузку этого же файла по любому имени обращения к нему. Например, по ссылке http://localhost/files/other.txt тоже должен загружаться файл default.txt.

    Пытаюсь сделать это с помощью .htaccess

    Код (Text):
    1. RewriteEngine On
    2. RedirectMatch "files/(.*\.txt)$" "http://localhost/files/$1"
    и получаю ошибку: "Ошибка: Ошибка сети".

    Где здесь ошибка в htaccess?
     
  2. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    добавил htaccess в папку files, т.е. сделал по-другому, и загрузка заработала:
    Код (Text):
    1. <IfModule mod_rewrite.c>
    2. RewriteEngine On
    3. RewriteBase /files/
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5. RewriteCond %{REQUEST_FILENAME} !-d
    6. RewriteRule . readme.txt [L]
    7. </IfModule>
    Но всё же остается вопрос: в первом случае что-то можно было изменить, или изначально задача нерешаемая первым способом?
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    В первом посте у вас никак не связанные друг с другом директивы. То что вы хотите сделать, называется рерайт:
    Код (Text):
    1. RewriteRule ^files/other\.txt$ files/default.txt [L]
    Описание директивы: RewriteRule
     
    118_64 нравится это.
  4. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    miketomlin, спасибо за ответ, это частично работающее решение. Оно отрабатывает запрос по существующему имени файла, но отдает error 404, если обратиться по несуществующему имени.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Не понял, подробнее объясните. Это как раз-таки желательно использовать для адресов, для кот. нет соотв. файлов, иначе может и не сработать.
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Имеете в виду, чтобы можно было обращаться по разным адресам (в пределах ветки /files/)? Ну, укажите в маске правила вместо other или other\.txt точку со звездочкой. Если при этом будет возникать зацикливание, добавьте перед правилом условие
    Код (Text):
    1. RewriteCond %{REQUEST_FILENAME} !-f
    Описание директивы: RewriteCond
    --- Добавлено ---
    Для этого варианта можно просто не закрывать регулярку (предпочтительный способ): ^files/ и все!
     
    118_64 нравится это.
  7. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    Я закомментировал все правила в .htaccess в папке files, внес строку в .htaccess, который в корне. После этого стала отдаваться 404

    Сейчас попробую предложенный вами способ "вместо other или other\.txt точку со звездочкой"

    У меня на самом деле еще вопрос есть, я его не задавал, чтобы не смешивать в одной теме. Но если вы вдруг знаете ответ, прошу помочь: пытаюсь поставить посредством .htaccess реферальную куку, получаю error 500. Убил вчера вечер и полночи, вопрос не решил. Неработающий код:
    Код (Text):
    1. Header set Set-Cookie referer="expr=%{HTTP_REFERER}"
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Я выше показал еще более простой вариант маски правила для случая, если концовка пути в адресе запроса может быть любой (т.е. для любого расширения и т.п.).
    --- Добавлено ---
    И правильно делали. Создавайте новую тему. Или попросите модеров выделить этот ваш вопрос в новую тему.

    Кстати, ваши вопросы к пыху не имеют прямого отношения. Здесь есть более подходящий раздел ;)

    И сильно не надейтесь на помощь. PHP-спецы не любят загромождать .htaccess и прочие конфиги сервера подобными действиями, предпочитая их выполнять программно.
     
    118_64 нравится это.
  9. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    спасибо, задал второй вопрос в подходящем тематическом разделе