2015-09-09 2 views
1

У меня возникли трудности с получением .htaccess, чтобы правильно переписать мои URL. У меня есть файл api, который ожидает параметры function, user, id, action, profileid..htaccess не удалось передать довольно url

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. Это правильно и было бы переписано на третьем правиле сверху.

Однако, когда я называю /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 линии были переписывания true, я немного смущен относительно того, почему два верхних правила не собираются. Любая помощь была бы признательна, так как это вызвало несколько вопросительных знаков.

+0

Вы пытались добавить флаг '[L]' после каждого правила? Это должно предотвратить дальнейшие обработки правил, если есть совпадения – arco444

ответ

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 
Смежные вопросы