Мой сайт использует сервер PLESK. Недавно я изменил корень документа с httpdocs
на httpdocs/public
. Это необходимо для дополнительной защиты личных файлов.
Однако я обнаружил, что он не перенаправляет правильно. Например. У меня есть index.php, который находится в публичном каталоге, который на данный момент автоматически перенаправляет в каталог администратора. Позвольте мне рассказать вам, как я определяю определенные константы, а затем две функции, которые я использую для перенаправления.
Существует несколько констант, определенных ниже:
<?php
// Assign file paths to PHP constants
// __FILE__ returns the current path to this file
// dirname() returns the path to the parent directory
define("PRIVATE_PATH", dirname(__FILE__));
define("PROJECT_PATH", dirname(PRIVATE_PATH));
define("PUBLIC_PATH", PROJECT_PATH . '/public');
define("SHARED_PATH", PRIVATE_PATH . '/shared');
define("ARRAY_PATH", PRIVATE_PATH . '/arrays');
// Assign the root URL to a PHP constant
// * Do not need to include the domain
// * Use same document root as webserver
// * Can dynamically find everything in URL up to "/public"
$public_end = strpos($_SERVER['SCRIPT_NAME'], '/public') + 7;
$doc_root = substr($_SERVER['SCRIPT_NAME'], 0, $public_end);
define("WWW_ROOT", $doc_root);
Тогда вот две функции в моем functions.php, который включен в initialize.php (приведенный выше фрагмент от initialize.php)
<?php
/**
* @param string $script_path
* @return string
*/
function url_for(string $script_path): string
{
// add the leading '/' if not present
if ($script_path[0] != '/') {
$script_path = "/" . $script_path;
}
return WWW_ROOT . $script_path;
}
/**
*
* @param string $loc
*/
function redirect_to(string $loc): void
{
header("Location: " . $loc);
exit;
}
Ниже упомянутый выше index.php
<?php
require_once('../private/initialize.php');
header('Location: ' . url_for('admin'));
Обратите внимание, что в этом случае я не использую функцию redirect_to (). Вот выходной URL, который я получаю:
https://mydomainname.com/index./admin
Это недопустимо и выдает ошибку 404 http. Поэтому решил посмотреть, что произойдет, если я перейду к ожидаемому URL-адресу, который будет
https://mydomainname.com/admin
Страница найдена, НО файлы css и js для моего проекта не найдены. Интересно, что я вижу доказательства того, что они включены, потому что css и js динамически загружаются из частного каталога через константу SHARED_PATH. Так почему я вижу этот индекс. и как бы я остановился, это мой основной вопрос.