Htaccess重写规则条件

时间:2011-07-10 08:02:54

标签: php .htaccess mod-rewrite get conditional

对于.htaccess文件,我是一个完整的菜鸟......我要做的是检查GET变量是否存在,?si=10,并将其传递给重写,但是只有它存在。

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

这样,当我说website.com/user/Username/时,它会转到服务器website.com/profile/?name=Username上。但是当我添加do website.com/user/Account/?si=10时,服务器没有将si变量传递到实际加载的页面上。知道怎么做吗?对不起,如果我措辞严厉......

2 个答案:

答案 0 :(得分:4)

尝试QSA flag

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

从手册......

  

当替换URI包含a时   查询字符串,默认行为   RewriteRule是丢弃现有的   查询字符串,并将其替换为   新生成的。使用[QSA]   flag导致查询字符串   组合

答案 1 :(得分:1)

你可以这样做:

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

百分号%引入来自rewriteCond的匹配或匹配,并且您使用美元符号作为来自rewriteRule的匹配的正常符号。这使您可以完全控制查询变量,但是,QSA更简单。