我有一个系统,其中每个用户都有一个子域和自己的数据库。例如:
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
标志只是为了捕获格式错误的请求。