【问题标题】:Htaccess Rewrite Rule ConditionalHtaccess 重写规则条件
【发布时间】:2011-10-02 04:03:24
【问题描述】:
当涉及到 .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 变量传递到实际加载的页面上。知道我会怎么做吗?对不起,如果我措辞不好..
【问题讨论】:
标签:
php
.htaccess
mod-rewrite
get
conditional
【解决方案1】:
你可以这样做:
RewriteCond %{QUERY_STRING} ^si=([0-9]+)$ // replace regex as neccesary
RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1&si=%1
百分号 % 从 rewriteCond(s) 中引入一个或多个匹配项,您可以正常使用美元符号来处理来自 rewriteRule 的匹配项。这使您可以完全控制查询变量,但是是的,QSA 更简单。
【解决方案2】:
试试QSA flag
RewriteRule ^user/([^/\.]+)/?$ profile/index.php?name=$1 [QSA]
从手册...
当替换 URI 包含
查询字符串,默认行为
RewriteRule 就是丢弃已有的
查询字符串,并将其替换为
新生成的一个。使用 [QSA]
flag 导致查询字符串为
结合起来。