У меня проблема с получением корневого URL с этой функцией PHP , которую я написал. Я могу получить это, но Я должен сделать исключения для каждого сервера , но я желаю одну согласованную функцию вместо . Можете ли вы показать мне, как это исправить?
Я помещаю его в корневую папку данного веб-сайта, которая на моей рабочей станции Ubuntu будет находиться в / var / www / website, но на моем сервере CentOS она может находиться в / home / me / website. Он работает на моей рабочей станции, но на сервере мне по какой-то причине приходится делать другую версию. Кроме того, у меня есть еще одна версия, которую я должен был сделать для еще одного сервера CentOS, который, похоже, не понравился этой функции. В конце этого вопроса я также перечисляю некоторую справочную информацию о том, почему я делаю это в первую очередь.
Версия рабочей станции
public function getRootURL() {
$sTemp = str_replace($_SERVER['DOCUMENT_ROOT'],'',__DIR__);
$sTemp = str_replace($sTemp, '', $_SERVER['REQUEST_URI']);
$sPageURL = (@$_SERVER['HTTPS'] == 'on') ? 'https://' . $_SERVER['SERVER_NAME'] : 'http://' . $_SERVER['SERVER_NAME'];
$sPageURL .= ($_SERVER['SERVER_PORT'] != 80) ? ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'] : $_SERVER['REQUEST_URI'];
$sRootURL = str_replace($sTemp,'',$sPageURL);
$sRootURL = rtrim($sRootURL, '/') . '/';
$sRootURL = (strpos(' ' . $sRootURL, '://') === FALSE) ? $sPageURL : $sRootURL;
return $sRootURL;
}
Версия сервера
public function getRootURL() {
$sTemp = str_replace($_SERVER['DOCUMENT_ROOT'],'',__DIR__);
$sTemp = str_replace($sTemp, '', $_SERVER['REQUEST_URI']);
$sPageURL = (@$_SERVER['HTTPS'] == 'on') ? 'https://' . $_SERVER['SERVER_NAME'] : 'http://' . $_SERVER['SERVER_NAME'];
$sPageURL .= ($_SERVER['SERVER_PORT'] != 80) ? ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'] : $_SERVER['REQUEST_URI'];
$sRootURL = str_replace($sTemp,'',$sPageURL);
$sRootURL = rtrim($sRootURL, '/') . '/';
$sRootURL = (strpos(' ' . $sRootURL, '://') === FALSE) ? $sPageURL : $sRootURL;
if (strpos(' ' . $sRootURL, 'mycentosserver.com')>0) {
$sRootURL .= 'website/';
}
return $sRootURL;
}
На серверной версии обратите внимание на оператор if / then mycentosserver.com - в этом разница.
Альтернативная версия сервера
function getRootURL() {
$sTemp = str_replace($_SERVER['DOCUMENT_ROOT'],'',__DIR__);
$sTemp = str_replace($sTemp, '', $_SERVER['REQUEST_URI']);
$sPageURL = (@$_SERVER['HTTPS'] == 'on') ? 'https://' . $_SERVER['SERVER_NAME'] : 'http://' . $_SERVER['SERVER_NAME'];
$sPageURL .= ($_SERVER['SERVER_PORT'] != 80) ? ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'] : $_SERVER['REQUEST_URI'];
$sRootURL = str_replace($sTemp,'',$sPageURL);
$sRootURL = rtrim($sRootURL, '/') . '/';
$sRootURL = (strpos($sRootURL, '://') === FALSE) ? $sPageURL : $sRootURL;
$sRootURL .= 'website2/'; // heck, I give up -- strange Apache problem on this server
return $sRootURL;
}
Фон
Обычно я использовал бы MVC-фреймворк, но у меня есть клиент, который хочет редактировать вещи, когда я ухожу, и который не любит MVC и не понимает его. У него есть упрощенные навыки PHP. Итак, я использую .htaccess, который выглядит следующим образом для красивых URL-адресов, и те, где косые черты могут заканчиваться на конце URL-адреса, в качестве альтернативы:
Options -Indexes +FollowSymlinks -MultiViews
RewriteEngine on
#No slash on the end of the url and not a real file/folder? then show x.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]*$ "$0.php" [nc]
#slashes on the end still and not a real file/folder, then remove them
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
#if still here, and not a real file/folder, then show x.php in the alternative way
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ "$1.php" [nc]
И я создаю подпапки, такие как _css, _js, _classes и т. Д., Стараясь сделать вещи довольно простыми. Каждая страница имеет как PHP в верхней части, а затем параметры в нижней части HTML. Это попытка устранить код спагетти. Кажется, клиенту это нравится, хотя я бы предпочел MVC, и особенно по этой причине с корневым URL.
Обратите внимание, однако, что с техникой .htaccess, есть случаи, когда мой HTML может не иметь правильного относительного пути, например, когда кто-то добавляет косую черту в конце URL, и поэтому я должен использовать тег в HTML для очистки с относительным путем. Вот почему функция getRootURL () должна работать правильно.