.htaccess mod_使用2个或更多参数重写url

.htaccess mod_使用2个或更多参数重写url,.htaccess,mod-rewrite,apache2,.htaccess,Mod Rewrite,Apache2,URL:http://example.com/good_game/osmp/ RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)(.*)$ /?service=$1&terminal=$2 [L,QSA] 我收到 Array ( [service] => good_game [terminal] => /os

URL:
http://example.com/good_game/osmp/

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)(.*)$ /?service=$1&terminal=$2 [L,QSA]
我收到

Array ( [service] => good_game [terminal] => /osmp/ )
我需要

Array ( [service] => good_game [terminal] => osmp )

多内存需要什么重写规则?

这应该能满足您的需要:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ /?service=$1&terminal=$2 [L,QSA]
您的规则的问题是,您在第一个组之后使用了
(.*)
,因此它将得到该组剩余的任何内容,即
/anything/

因此,基本上,您的规则是告诉服务器获取任何东西,而不是
/
,这样它就得到了一个好游戏,然后您要求它获取剩余的任何东西,这样它就得到了一个重写规则,如:

RewriteRule ^/([^/]*)/([^/]*)/?$ /?service=$1&terminal=$2 [L,QSA]
你应该做你需要的。基本上,将参数中不需要的字符放在()之外,以避免捕获它们