如何使用mod_rewrite抽象获取子域名请求

我一整天都在这里,我认为自己掌握了正则expression式,但是我不再相信自己能做到。 我搜遍了,阅读了一些关于mod_rewrite的可怕指南,我很难过。

我想让这个电话

subdomain.domain.com/u/satbirkira 

看上去和上面完全一样,但是执行并显示它

  domain.com/user.php?user_name=satbirkira?subdomain_given=subdomain 

这应该是非常简单的,但我不明白。 以下是我想到的:

 RewriteCond %{HTTP_HOST} ^(.*)user.php\?user_name=(.*)$ [NC] RewriteRule ^(.*)$ http://%1%{REQUEST_URI}/u/$3 

我不知道为什么一些RewriteCond中断,如果你删除无用的捕获点像第一个(。*),但我已经学会了滚动它。 我将不胜感激,如果有人会解释为什么方法是不正确的,语法,捕获点和replace以及variables。

编辑

它类似于http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html#4上的目标,“4)将yoursite.com/user.php?username=xyz改写为yoursite .com / xyz“期望答案对我来说没有任何意义。

根据PHP访问数据的方式,用户名?user_name=satbirkira部分可能有点棘手,要重写进PHP,有些应用程序最终得到的是原始查询string,而不是重写的string。

但是,现在,让我们从这里开始,看看它是从哪里得到的。 这应该是在VirtualHost上下文,如果它在<Directory>.htaccess它需要调整..

 RewriteRule ^/u/([^/]+)/?$ /user.php?user_name=$1 [L] 

对于.htaccess ( 你不应该使用! ):

 RewriteRule ^u/([^/]+)/?$ user.php?user_name=$1 [L] 

这应该工作:

 RewriteCond %{HTTP_HOST} (.*).domain.com RewriteRule ^/u/([^/]+)/?$ /user.php?user_name=$1&domain_given=%1 [P] 

记住RewriteRule的LHS是如何被首先testing的。 然后在RewriteCond LHS与RHS匹配,如果匹配,则将发生。 您在RewriteCond的RHS中捕获的string被存储在%1,%2等等中…您在$ +,ä2等中的RewriteRule的LHS中捕获的string…