2013-08-21 4 views
0

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

ответ

0

Хорошо, поэтому я понял. Проблема заключалась в том, что на моем локальном компьютере и на моем другом сервере я не был в корневом домене, поэтому я использовал $_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), '\\/'); 
} 

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

1

Какой сироп вы «вылили» поверх вашего файла php.ini? Возможно, это заработало! ;)

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

+0

Это был браузер, делающий это! Но я тоже виноват. Я поставил ответ как исправление – earl3s

+0

. Ваш ответ заставил меня думать в правильном направлении, спасибо большое. – earl3s