2011-03-27 69 views
0

我一直在成功使用以下重寫,它使www.site.com/123/abc指向www.site.com/index.php?id=123 &頁面= abc重寫忽略目錄中存在的文件

RewriteEngine On 
RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L] 
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L] 

到現在爲止。當存在的目錄與$ 1 www.site.com/123/我無法訪問的/ 123 /目錄中的文件相匹配時。如果我嘗試將重寫更改爲下面的所有靜止圖像,但文件除外。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L] 
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L] 

什麼人會用來繼續使用國防部重寫,而不是忽略目錄中的文件,當它存在。

+0

讓我試着解釋我的方案這樣。我有一個網站site.com/123/沒有目錄123哪個mod改寫指向site.com/index.php?id=123新的場景開始發揮作用,我現在有site.com/456/中的網址是一個名爲456的目錄。在這個目錄中沒有php腳本,只有MP3和圖片。這意味着我仍然需要mod重寫來指向上面的site.com/index.php?id=456,但仍然可以在index.php加載時訪問這些文件 - 現在它不會。這是我卡住的地方 – Mikey 2011-03-27 13:40:31

回答

0

RewriteCond僅適用於非常接下來的RewriteRule。既然你有兩條規則,你需要重複你的條件。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L] 

或者你也可以在頂部過濾掉的文件和目錄的重寫規則,然後再繼續:

# Do nothing if URL points to existing file or directory. 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule (.*) $1 [L] 

RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L] 
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L] 
+0

現在我不知道。然而,我嘗試了它,我可以從目錄中提取圖像 - 不幸的是,它破壞了重寫規則^([0-9] +)/(。*)$ /index.php?id=$1&page=$2,包含所有腳本的文件。 – Mikey 2011-03-27 03:03:29

+0

讓我試試這樣解釋我的場景。我有一個網站site.com/123/有沒有目錄123哪些mod改寫指向site.com/index.php?id=123 新的場景發揮作用,我現在有網址在site.com/ 456 /有一個目錄,它被稱爲456.在這個目錄中沒有php腳本,只有MP3和圖像。這意味着我仍然需要mod重寫來指向上面的site.com/index.php?id=456,但仍然可以在index.php加載時訪問這些文件 - 現在它不會。 這是我卡住的地方。 – Mikey 2011-03-27 12:41:02