我很难让.htaccess正确地重写我的网址。
我有一个api文件,期望参数为function
,user
,id
,action
,profileid
。
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行已被重写为真,我对于为什么前两个规则没有被选中感到困惑。任何帮助都会感激不尽,因为这个引起了一些问号
答案 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