Использование /directory/file.js не включает домен

Так что я никогда не видел этого раньше. У меня есть сервер EC2 (впервые настраивающий это), использующий Debian Linux и Apache 2.2. Используя путь вроде так /js/file.js ищет http://js/file.js, На моей локальной машине и общем сервере моей мечты у меня нет этой проблемы. На самом деле я никогда не видел эту проблему на сервере раньше. Что он должен сделать, это искать http://domain.com/js/file.js, Кто-нибудь имеет представление о том, почему это может происходить? Я полил свой файл php.ini и не имею ни малейшего намека на то, что я должен изменить или добавить, чтобы это исправить.

2 ответа

Решение

Хорошо, я понял это. Проблема заключалась в том, что на моей локальной машине и на другом сервере я не был в корневом домене, поэтому я использовал $_SERVER['SCRIPT_NAME'].DIRECTORY_SEPARATOR."js/" определить корневой URL, чтобы сделать псевдоним пути к файлам js. Это вернулся /app/js/, Это работало нормально, когда файлы в подпапке из домена где-то, например domain.com/app/js/file.js,

Однако однажды я устанавливал это приложение на моем сервере, и это было корневое приложение $_SERVER['SCRIPT_NAME'].DIRECTORY_SEPARATOR."js/" возвращался //js/, Это была проблема! Это не то же самое, что /js/, Это было в обход домена как части URL и вместо этого указывало браузеру http://js как будто это был полностью определенный URL. Я предполагаю // это сокращение для http:// хотя я никогда не пробовал это раньше.

Чтобы исправить это, я взломал эту функцию, основанную на чем-то в Yii Framework, что я и использую для этого приложения.

function getBaseUrl() {
    $scriptName=basename($_SERVER['SCRIPT_FILENAME']);
    if(basename($_SERVER['SCRIPT_NAME'])===$scriptName)
        $_scriptUrl=$_SERVER['SCRIPT_NAME'];
    else if(basename($_SERVER['PHP_SELF'])===$scriptName)
        $_scriptUrl=$_SERVER['PHP_SELF'];
    else if(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME'])===$scriptName)
        $_scriptUrl=$_SERVER['ORIG_SCRIPT_NAME'];
    else if(($pos=strpos($_SERVER['PHP_SELF'],'/'.$scriptName))!==false)
        $_scriptUrl=substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;
    else if(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT'])===0)
        $_scriptUrl=str_replace('\\','/',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']));
    else
        throw new Exception('The App is unable to determine the entry script URL.'));
    return rtrim(dirname($_scriptUrl), '\\/');
}

Я надеюсь, что это помогает кому-то еще.

Какой сироп вы "залили" на файл php.ini? Это, возможно, склеило работы!;)

Вы просматривали HTML-код через браузер (View > Page Source) и получаете http://js/file.js? В том, что src="http://js/file.js" в теге? Добавление http://domain.com/ должна быть работа браузера, а не сервера. Некоторые браузеры отображают URL с уже добавленным доменом, в то время как другие показывают именно то, что вы отправили на страницу. Отправляете ли вы какие-либо теги, которые, возможно, отсутствуют в домене? Я думаю, что он должен применяться только к относительным URI, но это стоит проверить. Вы действительно использовали js/file.js или /js/file.js? Они очень разные.

Другие вопросы по тегам