2012-01-27 80 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