Так что я никогда не видел этого раньше. У меня есть сервер 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 не включает домен
ответ
Хорошо, поэтому я понял. Проблема заключалась в том, что на моем локальном компьютере и на моем другом сервере я не был в корневом домене, поэтому я использовал $_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> Source Source), и то, что вы получаете, это http://js/file.js
? Это src="http://js/file.js"
в теге? Добавление http://domain.com/
должно быть работой браузера, а не сервера. Некоторые браузеры отображают URL-адреса с уже добавленным доменом, в то время как другие точно показывают, что вы отправили на страницу. Вы отправляете теги, которые, возможно, отсутствуют в домене? Я думаю, что это только должно относиться к относительным URI, но это стоит проверить. Вы действительно использовали js/file.js или /js/file.js? Они совсем разные.
Это был браузер, делающий это! Но я тоже виноват. Я поставил ответ как исправление – earl3s
. Ваш ответ заставил меня думать в правильном направлении, спасибо большое. – earl3s