带有空参数的mod_rewrite查询字符串

So I want to do a mod_rewrite in my .htaccess file so that the following browser request:

www.mysite.com/portal/v1/v2/v3

...will be rewritten and processed in php as this:

www.mysite.com/portal.php?n1=v1&n2=v2&n3=v3

The caveat here is that some or all of those GET variables could be blank, meaning the browser request could take any of the following forms:

www.mysite.com/portal/v1/v2/v3
www.mysite.com/portal/v1/v2
www.mysite.com/portal/v1
www.mysite.com/portal

I can sort things out in the php file, but what code should I use for .htaccess? Thanks!

Try this in your /.htaccess

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)/(.*)/(.*)/?$ /portal.php?n1=$1&n2=$2&n3=$3 [QSA,L,NC]

RewriteCond ensures that if the request is already for a file or directory RewriteRule will be skipped.

$1 $2 $3 refer to a pattern matched inside a RewriteRule.

You can use this code in your DOCUMENT_ROOT/.htaccess file:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ portal.php?n1=$1&n2=$2&n3=$3 [QSA,L]

RewriteRule ^([^/]+)/([^/]+)/?$ portal.php?n1=$1&n2=$2 [QSA,L]

RewriteRule ^([^/]+)/?$ portal.php?n1=$1 [QSA,L]

RewriteRule ^/?$ portal.php [L]