2012-01-27 82 views
1

我有一個網站,我試圖使用mod_rewrite從網址更改:的.htaccess mod_rewrite的通用規則

/directory/filename.phpdirectory/filename/

/directory/filename.php?id=7directory/filename/7/

/directory/filename.php?id=7&file_id=1directory/filename/7/1/

我儘管如此,我無法制定正則表達式來用於這些頁面。這裏是整個.htaccess文件:

RewriteEngine On # Turn on the rewriting engine 

RewriteRule ^(.*)/?$ /directory/$1 [L] #Rewrite a page without $_GET variables 
RewriteRule ^([^/]+)/([0-9]+)/?$ /directory/$1?id=$2 [L] #Rewrite a page with 1 $_GET variables 
RewriteRule ^([^/]+)/([0-9]+)/([0-9]+)/?$ /directory/$1?id=$2&file_id=$3 [L] #Rewrite a page with 2 $_GET variables 
+1

是在'directory'或'root'文件夾中的.htaccess? – 2012-01-27 11:28:26

+0

在目錄文件夾中 – 2012-01-27 11:32:09

+0

你的意思是你想從**'foo/bar /'**重寫(請求)**到**'foo/bar.php'的另一種方式? – Qtax 2012-01-27 11:32:39

回答

2

如果.htaccess是在directory文件夾,然後將directory/路徑前綴將被剝離爲您和您不必理會它在重寫規則。

您可以使用類似:

RewriteEngine On # Turn on the rewriting engine 

RewriteRule ^([^/.]+)/?$ $1.php [L] # rewrite without query string parameters 
RewriteRule ^([^/.]+)/(\d+)/?$ $1.php?id=$2 [L] # one parameter 
RewriteRule ^([^/.]+)/(\d+)/(\d+)/?$ $1.php?id=$2&file_id=$3 [L] # two parameters 
+0

太棒了!謝謝Qtax :) – 2012-01-27 11:48:48

+0

因爲? – Qtax 2012-01-27 11:49:10

+0

@ ThinkingMonkey關於[QSA]標誌的觀點很重要,因爲某些映射的URI可能具有請求參數,如果沒有此參數,規則2和3將會丟失它們。 OP可能不希望發生這種情況。但一個+ 1受這個:) – TerryE 2012-01-27 12:08:01