좋아요. 나는 내가 케이크 한 조각이라고 생각한 몇 개의 URL을 짧게하고 싶을 때까지 eveything이 늠름한 것 같다고 생각했습니다.또 다른 Htaccess 문제
나는 내 자신의 MVC 구조를 가지고있다. 모든 MVC 구조는 모든 페이지가 index.php를 통해 진행되며 url에 따라 실제 contollers와 모델이 즉시로드된다. 이렇게하면 멋지고 깨끗한 URL을 얻을 수 있으며 응용 프로그램을 더 쉽게 개발할 수 있습니다.
그래서 내 htaccess로 파일 내에서 I는 다음과 같습니다 ...
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
내 index.php를 내 내가 필요한 컨트롤러 등의 URL 및로드의 길이를 계산
$length = count($url);
if($length > 5)
{
$this->Error->index();
return FALSE;
}
switch ($length)
{
case 5:
$controller_name->{$url[1]}($url[2], $url[3], $url[4]);
break;
case 4:
$controller_name->{$url[1]}($url[2], $url[3]);
break;
case 3:
$controller_name->{$url[1]}($url[2]);
break;
case 2:
$controller_name->{$url[1]}();
break;
default:
$controller_name->index();
break;
}
이 모든 작업은 절대적으로 문제가되지 않으므로 여기에 제 문제가 있습니다. www.thepage.com/accounts/general_users/profile/[account_name]
그래서이 URL을 '계정/general_users가 /'나는 피곤 내 htaccess로 내에서 다음
RewriteRule ^profile/april.lee$ accounts/general_users/profile/april.lee [QSA,L]
을하지만 내 초기 RewriteRule의 좋은 놀고 싶어하지 않는 것, 첫 번째 RewriteRule의 아래 그 자리는 그냥 렌더링하지 않는 경우, 위의 경우 응용 프로그램을 깰 것으로 보인다.
나는 무엇을 해야할지에 대해 꽤 난처했고,지도/조언을 조금 좋아할 것입니다. 정말 솔루션을 제안하고 전체 응용 프로그램을 다시 작업하지 않아도됩니다.
업데이트 내 컨트롤러와 모델로드 방법을 설명합니다 : 내가 얻을
1-하고 URL을 청소 :
// Get Clean URL
$url = isset($_GET['url']) ? $_GET['url'] : NULL;
$url = rtrim($url, '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
// Start Session
session_start();
// Create Application Core
require_once(APP_PATH . "core/core.php");
$AC = new Application_Core($config);
2 체크인이
if(empty($url[0]))
{
// Load and Instantiate Model
require(APP_PATH."models/m_index.php");
$this->Model = new m_index();
// Load and Instantiate Controller
require(APP_PATH."controllers/index.php");
$controller = new index();
$controller->index();
}
else
{
// Load and Instantiate Model
$model_file = APP_PATH."models/m_".$url[0].".php";
if(file_exists($model_file))
{
include($model_file);
$model_name = "m_".$url[0];
$this->Model = new $model_name();
}
else
{
echo $url[0];
$this->Template->render_error($this->error_page, $this->error_message);
return FALSE;
}
// Load and Instantiate Controller
$controller_file = APP_PATH."controllers/".$url[0].".php";
if(file_exists($controller_file))
{
require(APP_PATH."controllers/".$url[0].".php");
$controller_name = $url[0];
$controller_name = new $controller_name();
}
else
{
$this->Template->render_error($this->error_page, $this->error_message);
return FALSE;
}
$length = count($url);
// Check Method Exists
if ($length > 1) {
if (!method_exists($controller_name, $url[1])) {
$this->Template->render_error($this->error_page, $this->error_message);
return FALSE;
}
}
if($length > 5)
{
$this->Error->index();
return FALSE;
}
switch ($length)
{
case 5:
$controller_name->{$url[1]}($url[2], $url[3], $url[4]);
break;
case 4:
$controller_name->{$url[1]}($url[2], $url[3]);
break;
case 3:
$controller_name->{$url[1]}($url[2]);
break;
case 2:
$controller_name->{$url[1]}();
break;
default:
$controller_name->index();
break;
}
비어 있거나없는 경우
3 - 길이가 점검되고 적절한 컨트롤러 및 모델이로드됩니다.이 방법이 존재하지 않으면 사용자가 오류 페이지로 리디렉션됩니다.
한다 RewriteRule^프로필 /(.*)$ 계정/general_users/프로필/$ 1 [QSA, L] 주석에 대한 – Adam
안녕 @ 아담 덕분에,하지만 그 무시 무시한 (500) 내부를 불러 듯 서버 오류 페이지. – HireLee
나는 대답의 의미를 더 잘 설명했다. – Adam