好的,我認爲eveything是hunky-dory,直到我想縮短几個URL,我認爲這將是一塊蛋糕。又一個Htaccess問題
我已經開發了自己的MVC結構,其中所有頁面都是通過index.php進行的,並且取決於url,相關的控制器和模型會隨即加載。這給了我很好和乾淨的網址,並使應用程序更容易開發,因爲它變得更大。
所以我的.htaccess文件中,我有以下:
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]
所以我想縮短這個網址通過切掉賬戶/ general_users /「我累了我的htaccess中的以下內容:
RewriteRule ^profile/april.lee$ accounts/general_users/profile/april.lee [QSA,L]
但這似乎並不想發揮好與我最初的重寫規則,如果它的第一個重寫規則之下的地方它只是不渲染,如果它的上面它似乎打破申請。
我很難在做什麼,並會喜歡一點指導/建議。我真的想拿出一個解決方案,而不必重新工作整個應用程序。
更新來證明我是如何加載我的控制器和模型:
1 - 我得到和清潔的網址:
// 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 - 檢查長度並加載適當的控制器和模型,如果方法不存在,則用戶重定向到錯誤頁面。
重寫規則^輪廓/(.*)$賬戶/ general_users /資料/ $ 1 [QSA,L] – Adam 2013-03-23 17:52:10
嗨@Adam感謝您的評論,但似乎造就了可怕的500內部服務器錯誤頁面。 – HireLee 2013-03-23 17:58:03
我補充說明我的意思是一個更好的解答。 – Adam 2013-03-23 18:02:29