Как заставить php разрешать пути через htaccess?

419
28 декабря 2016, 06:21

Есть файл .htaccess в корневом каталоге сайта, в котором, среди прочего указаны следующие перенаправления:

RewriteRule ^([a-z]*)\/([1-9][0-9]*\/)?([a-z]*|[1-9][0-9]*\/)*$ index.php?page=$1&id=$2 [NC]
RewriteRule ([^\/]*)\.js$ public/scripts/$1.js [L]

HTML их прекрасно учитывает, то есть скрипты, расположенные в public/scripts/, подключаются с любой страницы сайта следующим образом:

<script type="text/javascript" src="jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="ion.sound.min.js"></script>
<script type="text/javascript" src="illtree.js"></script>

А вот PHP следующий код:

require_once "script.js";

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

require_once $_SERVER['DOCUMENT_ROOT']."/public/scripts/script.js";

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

Answer 1

PHP обращается к локальным файлам напрямую, а не через сервер, за перенаправление запросов к которому отвечает файл .htaccess. Однако, начиная с версии PHP 4.3.0 можно запрашивать с помощью функций require и include удалённые файлы, передав в качестве параметра url, вот так:

require_once "http://example.com/script.js";

Для работы подобных вызовов необходимо, чтобы такое поведение было разрешено в настройках PHP вашего сервера (параметр allow_url_include). Однако, следует помнить, что такие правки в конфиге снижают защищённость вашего сервера, поэтому их следует избегать.

Второй способ - включить директории, содержащие файлы для подключения в директиву настроек PHP include_path, или использовать функцию set_include_path(), для изменения данной настройки на время выполнения текущего скрипта - например, добавив её в подключаемый ко всем файлам вашего сайта конфиг.

READ ALSO
Yii2, не устанавливается title страницы

Yii2, не устанавливается title страницы

Пытаюсь установить title во view, делаю это вот так

430
Таблица для графика цен

Таблица для графика цен

ЗдравствуйтеСейчас вот такая структура:

411
Как переписать запрос с msql на yii2

Как переписать запрос с msql на yii2

Делаю фильтр, нужно сделать вот такой запрос через QueryTrait

367
Найти сумму элементов массива

Найти сумму элементов массива

Необходимо нати сумму всех элементов массива, каждый элемент которого равняется числу со значением после точки(float)Через array_sum() не вышло

364