.htaccess无法通过相当网址

时间:2015-09-09 14:42:46

标签: apache .htaccess mod-rewrite

我很难让.htaccess正确地重写我的网址。 我有一个api文件,期望参数为functionuseridactionprofileid

RewriteRule   ^phonebook/user/(.+)/(.+)/(.+)/(.+)$  /api.fcgi?function=phonebook;user=$1;id=$2;action=$3;profileid=$4
RewriteRule   ^phonebook/user/(.+)/(.+)/(.+)$       /api.fcgi?function=phonebook;user=$1;id=$2;action=$3
RewriteRule   ^phonebook/user/(.+)/(.+)$            /api.fcgi?function=phonebook;user=$1;id=$2
RewriteRule   ^phonebook/user(.+)$                  /api.fcgi?function=phonebook;user=$1
RewriteRule   ^phonebook/(.+)                       /api.fcgi?function=phonebook;id=$1
RewriteRule   ^phonebook(.*)                        /api.fcgi?function=phonebook$1

当我呼叫/phonebook/user/12345/1时,它被重写为 function=phonebook;user=12345;id=1。这是正确的,并且会在顶部的第3条规则上重写。

然而,当我打电话给/phonebook/user/12345/1/destination时,它被写为 function=phonebook;user=12345;id=1/destination符合我的预期,function=phonebook;user=12345;id=1;action=destination

同样,/phonebook/user/12345/1/destination/1被重写为 function=phonebook;user=12345;id=1/destination/1应该是function=phonebook;user=12345;id=1;action=destination;profileid=1

由于底线4行已被重写为真,我对于为什么前两个规则没有被选中感到困惑。任何帮助都会感激不尽,因为这个引起了一些问号

1 个答案:

答案 0 :(得分:0)

不要使用.+因为太贪心。请改用[^/]+

RewriteRule ^phonebook/user/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /api.fcgi?function=phonebook;user=$1;id=$2;action=$3;profileid=$4 [L,QSA]
RewriteRule ^phonebook/user/([^/]+)/([^/]+)/([^/]+)$ /api.fcgi?function=phonebook;user=$1;id=$2;action=$3 [L,QSA]
RewriteRule ^phonebook/user/([^/]+)/([^/]+)$ /api.fcgi?function=phonebook;user=$1;id=$2 [L,QSA]
RewriteRule ^phonebook/user([^/]+)$ /api.fcgi?function=phonebook;user=$1 [L,QSA]
RewriteRule ^phonebook/([^/]+) /api.fcgi?function=phonebook;id=$1 [L,QSA]
RewriteRule ^phonebook(.*) /api.fcgi?function=phonebook$1