IIRF / APACHE重写条件因查询字符串而失败

时间:2013-01-10 23:06:39

标签: php apache url-rewriting query-string iirf

我有一个CMS系统可以将丑陋的URL转换为更友好的URL。

到目前为止,而不是页面网址是这样的:

/pagebase.php?id=3644

我为每个页面设置了一个url写入设置,使其更友好。

例如:

RewriteRule ^/events$   /pagebase.php?id=3644 [I]

因此,当用户键入domain.com/events时,他们会将其拉到url上方。

这适用于几乎所有页面,除了这个我需要添加其他查询字符串以便我可以做这样的事情。

www.domain.com/events?y=2010=&m=&1d=2

那将重写为

www.domain.com/pagebase.php?id=3366&y=2010=&m=&1d=2. 

唯一的问题是url写入匹配失败,因为它没有看到?y = 2010 =& m =& 1d = 2作为查询字符串,它将其视为url的一部分而失败。

我需要修改我的重写文件以允许传递查询字符串。

我想做点什么     RewriteRule ^ / events-%QUERYSTRING%$ /pagebase.php?id = 3644 +%QUERYSTRING%[I]

从匹配中删除查询字符串,然后将其附加到书写网址的末尾。我对url重写的工作方式知之甚少。

以下是我的重写文件的示例。

RewriteRule ^/events$   /pagebase.php?id=3644
RewriteRule ^/faqs$   /pagebase.php?id=3659
RewriteRule ^/gallery$   /pagebase.php?id=3645
RewriteRule ^/gifts$   /pagebase.php?id=3646

我需要能在所有页面上运行的东西,我不想修改每个规则来处理特定的查询字符串,我只想要一个通用的解决方案来传递查询字符串。

1 个答案:

答案 0 :(得分:1)

您可以尝试匹配可选查询字符串,并将其附加到[QSA]修饰符:

RewriteRule ^/events(\?.*)?$   /pagebase.php?id=3644 [QSA,L]
RewriteRule ^/faqs(\?.*)?$     /pagebase.php?id=3659 [QSA,L]
RewriteRule ^/gallery(\?.*)?$  /pagebase.php?id=3645 [QSA,L]
RewriteRule ^/gifts(\?.*)?$    /pagebase.php?id=3646 [QSA,L]