.htaccess需要重写规则和额外的查询字符串

时间:2013-05-31 14:48:19

标签: .htaccess apache2

我在.htaccess中有以下行:

RewriteRule ^newpdfs/(.*)\.pdf /getnewpdf.php?pdf=$1

getnewpdf.php是一个脚本,用于将会话中的用户名添加到下载的文件名中。但是,有一种情况是尚未创建会话,并且用户的名称需要来自数据库。所以我需要传递一个ID(需要时)。我有这个:

RewriteRule ^newpdfs/(.*)\.pdf?id=(.*) /getnewpdf.php?pdf=$1&id=$2

然而我的ID查询被忽略了。我怎样才能传递查询字符串呢?

3 个答案:

答案 0 :(得分:2)

您缺少L(最后)标记,您将需要QSA(查询字符串追加)来附加任何现有的查询字符串。你的代码应该是这样的:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^newpdfs/([^.]+)\.pdf$ /getnewpdf.php?pdf=$1 [L,NC,QSA]

答案 1 :(得分:2)

只需将QSA标记添加到现有规则中:

RewriteRule ^newpdfs/(.*)\.pdf /getnewpdf.php?pdf=$1 [QSA]

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

此处进一步参考:http://httpd.apache.org/docs/2.4/rewrite/flags.html

答案 2 :(得分:1)

将[QSA]添加到规则的末尾,这意味着附加查询字符串