Использование /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? Они очень разные.