(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_URI
(MainConfig::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;
}