2011-04-18 56 views
0

我知道這應該很簡單,但我很難爲前端控制器編寫.htaccess規則。.htaccess前端控制器mod重寫故障

的/主題/文件夾包含所有我的CSS/JS /圖像等,所以我不希望他們傳遞雖然我的控制器

.htaccess文件在/ myadminarea /文件夾的根。

該網站的根目錄(下面的「/」沒有.htacess文件「/ myadminarea」)

前端控制器我看URL裏面,然後直接包括文件 - 但我想成爲與我接受的URL ..

如果url是一個特定的文件,我希望它傳遞雖然前端控制器

如果URL是一個目錄相當寬容(尾隨正斜槓)我不想承擔他們正在尋找該文件夾中的index.php

下面的規則適用於這樣的

mydomain.com/myadminarea/mysection/action/ 
(loads mydomain.com/myadminarea/mysection/action/index.php via the front controller) 

網址,但在網址跌倒在這樣的 -

mydomain.com/myadminarea/mysection/action/index.php 
包含一個文件名

(它不使用前端控制器只是加載文件直接) - 我知道!-f排除了文件的重寫規則,但是我已經嘗試了所有我能想到的組合,下面的內容至少適用於沒有文件名的url。當我嘗試路由每一個請求(除了那些在主題文件夾),我得到了一個服務器配置錯誤(500)

這是我的原則

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !^(themes)/ /myadminarea/index.php [NC,L] 

編輯:

新增簡明前端控制器

// what page is actually being requested? 
$uri = explode("/", $_SERVER["REQUEST_URI"]); 
//lose the first element and add index.php the last one if it is blank 
array_shift($uri); 
if (end($uri) == ''){ 
    array_pop($uri); 
    $uri[] = 'index.php'; 
} 

$page_requested = implode('/', $uri); 
if ($page_requested == 'myadminarea/index.php'){ 
    $page_requested = false; 
} 

includePage($page_requested); 

function includePage($page_requested){ 
    if ($page_requested && file_exists(BASE_FILE_PATH . $page_requested) && is_file(BASE_FILE_PATH . $page_requested)){ 
     include(BASE_FILE_PATH . $page_requested); 
    } else { 
     echo $page_requested; 
    } 
} 
+0

對於記錄時,()圍繞主題是不必要的。 – 2011-04-18 15:35:04

+0

你的前端控制器是如何工作的?它的文件名是什麼? – 2011-04-18 15:36:19

+0

@ M'vy我已經添加了我的前端控制器 – calumbrodie 2011-04-18 15:45:41

回答

1

在我重寫規則的斜線害了我......

RewriteRule !^themes/* myadminarea/index.php [L,QSA] 

RewriteRule !^themes/* /myadminarea/index.php [L,QSA]