2009-12-03 105 views
1

我在我的小PHP框架中使用.htaccess和mod_rewrite。它工作得很好,但我想擴大隻是將所有內容重定向到index.php。.htaccess URL重寫幫助!

我的目錄結構是這樣的(顯然簡體)

apps 
media 
system 
-- admin 
jscript 
templates 

我現在的重寫規則是:

RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

正如你所看到的,一切都mydomain.com/url'被重定向到index.php。我現在想要做的是允許任何'mydomain/admin /'指向'system'文件夾內的'admin'目錄。我也想在這個文件夾中使用正常的條件,所以我不會使用乾淨的用戶,而是使用像'mydomain.com/admin/some-kind-of-file.php'這樣的URL。

簡而言之,我只希望我的重寫條件適用於除我的系統/管理文件夾之外的所有內容。

這可能嗎?任何幫助將不勝感激!

+0

請提供3個「來自」URL的列表,以及重寫後它們應該是什麼樣子。例如。 'mydomain.com/admin/blah.php' =>'mydomain.com/system/admin/blah。因爲你的要求沒有那麼清楚。 – 2009-12-03 22:57:30

+0

對不起,我會盡力解釋一下。我希望任何'mydomain.com/admin'查看'system/admin'文件夾。示例: 'mydomain.com/admin/install.php'=>'mydomain.com/system/admin/install.php' 'mydomain.com/admin/subfolder/blah.php'=>'mydomain.com/ system/admin/subfolder/blah.php' – Hanpan 2009-12-03 23:01:01

回答

1

看來,以下內容僅適用的重寫規則,如果網址不啓動,site.com/mediasite.com/jscript


RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

我會說實話,我從來沒有見過在RewriteCond使用,直至現在$1,但似乎有趣。

那麼,如果你的網址是site.com/admin...?那麼你需要一個新的RewriteRule。此外,您還需要防止以admin開頭的URL由第一個RewriteRule重定向。


RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript|admin|system) 
RewriteRule ^/?(.*)$ index.php/$1 [L,R] 

RewriteRule ^/?(admin.*)$ system/$1 [L,R] 

更新1:添加system到不應該被應用到第一RewriteRule的URL列表。

更新2:從第一RewriteRule除去[L,QSA]並用[L,R]替換。

+0

奇... mydomain.com/admin/test.php 重定向到: mydomain.com/system/admin/?install.php 同樣,不知道那裏的?來自!也許我的apache安裝有問題。我不明白爲什麼這不起作用! – Hanpan 2009-12-03 23:15:34

+0

^/? < - 爲什麼?之前(管理員*) - 可以成爲它的一部分嗎? – Meep3D 2009-12-03 23:30:59

+0

我可能是錯誤的主導斜線。我不確定Apache如何處理它,因爲它是瀏覽器請求的URL的一部分。我只是想讓一個前導斜槓可選('?'是一個正則表達式運算符,意思是零或一)。 – 2009-12-03 23:40:01

2

只需添加admin以你的條件,並使用一個額外的規則來重定向它:

RewriteCond $1 !^(index\.php|media|jscript|admin)/ 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
RewriteRule ^admin/.* system/$0 [L] 
+1

將追蹤斜線添加到RewriteCond是一個不錯的主意,不同之處在於它會嘗試匹配「index.php /」 – Nick 2009-12-03 23:01:23

1

看來你的「媒體」和「JScript的」文件夾已經從重寫規則豁免,你能不能只添加'admin'文件夾呢?例如:

RewriteEngine On 
RewriteCond $1 !^(index\.php|media|jscript|admin) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

如果要真正地重定向一切都在/管理員/系統/管理(這將更新用戶的瀏覽器的URL也行),你會使用一個mod_alias中的規則是這樣的:

RedirectMatch permanent ^/admin/(.*)$ http://mysite.com/system/admin/$1 
+0

感謝您的答覆Nick。如果我的帖子不明確,我很抱歉。 admin文件夾是'system'文件夾的一個子目錄,這意味着上述不起作用。雖然我可以讓系統/管理員作爲重寫條件,但我想實際上將任何mydomain.com/admin重定向到mydomain.com/system/admin – Hanpan 2009-12-03 23:08:08

+0

我誤解了這個問題......編輯過的帖子做了我認爲你是 – Nick 2009-12-03 23:41:16

1

重定向市民前往管理員文件夾,然後再過濾休息,如:

RewriteRule ^admin/([^/]*)$ system/$1 [L,QSA] 

RewriteCond $1 !^(index\.php|media|jscript) 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
+0

我原本試過這個,有趣的。由於某種原因,它不起作用。如果我輸入以下內容: mydomain.com/admin/ 它將我重定向到此處: mydomain.com/system/admin/? 我不知道在哪裏?來自! – Hanpan 2009-12-03 23:11:35

+0

試試這個: http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/ 在過去的一年裏,我有一份複製粘貼到我的牆上。 – Meep3D 2009-12-03 23:29:13