0

(www.example.com/demos/website-name)クライアントにデモを表示するために常に行ってきたように、サーバーのドキュメントルートのサブフォルダーに新しい Web サイトをアップロードしました。

私のcmsでは、mod_rewriteすべてのリクエストをプッシュしindex.php、phpで「内部」の書き換えを行っているため、それ$_SERVER['REQUEST_URI']を読み取って正しいページをロードするために取得する必要があります。

非常にランダムに (この場合のように cms がサブフォルダーに配置されている場合のみ) REQUEST_URI、ブラウザーの uri と一致せず、前のもののままです。たとえば、私は に"/cms/foo"います"/cms/bar"。ページがリロードされますが、ダンプしREQUEST_URIても"/cms/foo".

これがどのように可能であるか、私は本当に理解できません。

.htaccess は次のようになります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

そして、これが私が取得する方法ですREQUEST_URIMainConfig::ROOT_URLサブフォルダーパス「/ demos / website-name」です):

public static function getPath()
{
    if(isset(self::$cache['path'])) {
        return self::$cache['path'];
    }
    if(isset($_SERVER['REQUEST_URI'])) {
        $path = str_replace(MainConfig::ROOT_URL, '', $_SERVER["REQUEST_URI"]);
        $path = explode('/', $path);
        if(trim($path[1]) == '') {
            $path = array();
        }
        unset($path[0]);
        $path = array_values($path);
        for($i = 0; $i < count($path); $i++) {
            $fragment = $path[$i];
            if(strpos($fragment, '?') !== false) {
                $lastPathIndex = $i;
                break;
            } elseif(strpos($fragment, 'index.php') !== false) {
                $lastPathIndex = $i;
                break;
            }
        }
        if(isset($lastPathIndex)) {
            $lastPathElement = array();
            $length = count($path);
            for($i = $lastPathIndex; $i < $length; $i++) {
                $lastPathElement[] = $path[$i];
                unset($path[$i]);
            }
            $lastPathElement = str_replace('index.php', '', implode('/', $lastPathElement));
        }
        if(isset($lastPathElement)) {
            $path[] = $lastPathElement;
        }
    } else {
        $path = array();
    }
    $path = array_values($path);
    self::$cache['path'] = $path;
    return $path;
}
4

0 に答える 0