作成したこのPHP関数でルートURLを取得するのに問題があります。私はそれを得ることができますが、サーバーごとに例外を作成する必要がありますが、代わりに1つの一貫した関数が必要です。修正方法を教えていただけますか?
Ubuntuワークステーションでは/var/ www / websiteの下にある特定のWebサイトのルートフォルダーに貼り付けますが、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;
}
サーバーバージョンでは、「mycentosserver.com」のif/thenステートメントに注意してください。これが違いです。
代替サーバーバージョン
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スキルを持っています。そのため、きれいなURLには次のような.htaccessを使用しており、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手法では、URLの末尾にスラッシュを追加するなど、HTMLに適切な相対パスがない場合があるため、HTMLでタグを使用して、相対パスで処理する必要があることに注意してください。パス。これが、getRootURL()関数が正しく機能する必要がある理由です。