2011-07-10 77 views
1

我是一个完整的noob当涉及到.htaccess文件...我想要做的是检查是否存在一个GET变量,?si=10,并将其传递到重写,但只有存在。Htaccess重写规则有条件的

RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1 

这样一来,当我有说website.com/user/Username/不言而喻,在服务器上,而不是website.com/profile/?name=Username。但是当我添加website.com/user/Account/?si=10时,服务器没有将si变量传递到实际加载的页面上。任何想法我会如何做到这一点?很抱歉,如果我的措辞这个不好..

回答

4

尝试QSA flag

RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1 [QSA] 

从手动...

当更换URI包含 查询字符串, 重写规则的默认行为将丢弃现有的 查询字符串,并将其替换为新生成的 。使用[QSA] 标志会导致查询字符串合并为 。

+0

太棒了,谢谢我不知道这样的东西存在... –

1

你可以这样说:

RewriteCond %{QUERY_STRING} ^si=([0-9]+)$ // replace regex as neccesary 
RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1&si=%1 

百分号%在比赛中带来或从的RewriteCond的匹配程度,并使用美元符号正常从重写规则比赛。这可以让你完全控制你的查询变量,但是,QSA更简单。