URL-адрес неожиданно изменяется при использовании пользовательского перенаправления с константами - PullRequest
0 голосов
/ 04 сентября 2018

Мой сайт использует сервер 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. Так почему я вижу этот индекс. и как бы я остановился, это мой основной вопрос.

...