.htaccess — проблема относительного пути при использовании PHP Включить в подкаталоги

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

Однако я столкнулся с проблемой. Все папки ресурсов шаблона (CSS, JS, Изображения и т. Д.) Находятся в корневой папке. localhost/appname/, а также меню навигации (navmenu.php). Я включаю меню на каждой странице.

Проблема возникает, когда я пытаюсь включить navmenu.php внутри файлов в подкаталогах.

т.е. когда я включаю navmenu.php в index.php(Оба в корневой папке) прекрасно работает. Но когда я включаю navmenu.php в addstudent.php, расположенном в подкаталоге Student, все a href ссылки в navmenu.php становятся студентами / *. php (Относительные ссылки)

Как правильно решать такие ситуации ..
У меня есть файл конфигурации, который включен во все файлы php. Как я должен создать константу ..

и как мне обновить ссылки в navmenu.php HREF ссылки.

Заранее спасибо

0

Решение

Чтобы он всегда был включен независимо от глубины каталога, попробуйте следующее

include $_SERVER['DOCUMENT_ROOT'] . "/includes/navmenu.php";

Это должно вернуть что-то вроде: /home/<user>/public_html/includes/navmenu.php

В большинстве моих проектов; У меня тоже есть файл настроек:

$LiveDir = "http://localhost/project";
$RootDir = "/home/user/public_html/project";

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

<a href='<?=$LiveDir?>/some/directory/index.php'>Some Link</a>

Я использую аналогичную настройку для работы между моей работой и моим домом на огромной CRM. Если я нахожусь дома ссылки префикса с http://127.0.0.1/ когда я на работе, он автоматически преобразуется в http://192.168.10.23/Matilda

Внимание: $ _SERVER не заселяется во время работы cron. Работа вокруг:

Создать файл: CronMgr.php (например) с содержанием и направьте на него свою работу cron .:

<?php file_get_contents("/full/path/to/the/script.php"); ?>

Это откроет экземпляр, где $_SERVER является заполняется, и скрипт будет работать без проблем.

1

Другие решения

Это нормальное поведение браузеров.
Для решения вашей проблемы есть 2 способа:
1. Начните ссылки с «/», т.е. «/index.php», «/about.php» и т. Д. Это заставит браузер создавать URL-адрес из корня сайта.
2. Напишите полные пути к страницам в navmenu.php с помощью PHP:

$rootPath = 'http://example.com/';
<a href="<?php echo $rootPath; ?>">Home</a>
<a href="<?php echo $rootPath.'/about.php'; ?>">About</a>
0

В такой ситуации я бы определил константу, которая содержит путь к каталогу корня проекта, и вы включили все, что с этим связано. Это позволяет избежать относительного включения пути.

например Убедитесь, что это загружается для всех страниц. например общий файл conf или общий index.php. Я не знаю, как у вас все настроено. (Или используйте $_SERVER['DOCUMENT_ROOT'] как указано в другом месте)

define('PROJECT_ROOT','/localhost/appname/');

а потом где-то еще

include(PROJECT_ROOT . 'navmenu.php');
0