2013-06-24 63 views
1

我总是使用下一个:重写规则的多个文件名

RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L] 

重写我的链接。我只使用了一个文件名“page.php”,它工作。 今天,我要添加另一个文件“project.php”,并需要另一个重写规则吧,这就是我想在.htaccess使用全码:

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L] 

RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L] 
RewriteRule ^(.*)/(.*)/(.*)/(.*)/$ project.php?category=$1&id=$4&type=$2&name=$3 [L] 

但是,这只是工作第一条路,第二条。请,任何人都可以帮忙弄清楚吗?我试图搜索它一段时间,但找不到解决方案。提前谢谢了!

+0

我们可以得到一个网址的例子吗? page.php和project.php都是。 –

+0

谢谢你的回复,乔纳森。我现在不能提供实时链接,但是当我尝试从第二个链接获取“类别”时: project.php?category = $ 1&id = $ 4&type = $ 2&name = $ 3(链接转换后) 它将它们全部放在一起,包括“id”,“type”等等,以斜线表示;例如一/二/三 – dnns

+1

是的,我明白了。我不需要实际的实时链接,我只是想知道链接大概是什么样子。我已经可以告诉你的问题是'(。*)'表示“零个或多个任何字符”。这将包括'/'。所以所有的URL都会匹配'。*'使第一条规则总是成立。之后重写停止。你应该更好地识别哪些类型的字符(仅限数字,仅限字母,两者......等)应该在每个组中(括号之间)并匹配。 –

回答

1

乔纳森库恩说(.*)阅读所有的字符,以便把project.php rule第一和使用至少([^/]+)代替(.*)在该规则。 ([^/]+)阅读除/以外的一个或多个字符。