通过htaccess传递多个参数

通过htaccess传递多个参数

我有一个系统,其中每个用户都有一个子域和自己的数据库。例如:

usuarioa.system.com
usuariob.system.com

为了在浏览系统时将子目录保留在导航栏上,我使用了以下规则:

RewriteEngine on
RewriteCond% {HTTP_HOST} ^ usera.system.com $ [OR]
RewriteCond% {HTTP_HOST} ^ www.usera.system.com $
RewriteRule ^ (. *) $ http://www.system.com/access/$ 1? user = usera [P]

它运行完美,因为通过 PHP 使用 $_REQUEST,直接连接到正确的数据库。问题是此规则不接受多个参数,并且我所做的任何更改都会导致错误 403。所以我在 PHP 中创建了一个临时解决方案,但我不想继续使用它:

list ($queryString, $id) = explode ("user =", $ _SERVER [' REQUEST_URI ']);
list ($id, $idUsu) = explode (".", $id);

我怎样才能通过 htaccess 直接传递 02 个参数并让子目录保留在导航栏上?

抱歉我的英语不好,我正在使用 Bing 翻译。

答案1

RewriteRule ^ (. *) $ http://www.system.com/access/$ 1? user = usera [P]

如果您指的是将原始请求中的附加查询字符串参数传递给代换,那么您就需要指令QSA上的(查询字符串附加)标志RewriteRule

旗帜QSA合并请求中的查询字符串与您在代换,否则,您所声明的查询字符串将覆盖请求中的查询字符串,并且不会传递。

例如:

RewriteRule (.*) http://www.system.com/access/$1?user=usera [QSA,P]

在旁边:这...

RewriteCond% {HTTP_HOST} ^usera.system.com$ [OR]
RewriteCond% {HTTP_HOST} ^www.usera.system.com$

与以下内容相同,并且还允许使用 FQDN(以点结尾):

RewriteCond% {HTTP_HOST} ^(www\.)?usera\.system\.com [NC]

记住要转义点以匹配文字点,否则,您将匹配任何字符。该NC标志只是为了捕获格式错误的请求。

相关内容