IIRF / APACHE重写条件失败


IIRF / APACHE Rewrite Conditions Fail with query string

我有一个CMS系统,将丑陋的url转换成更友好的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的一部分而失败。

我需要修改我的重写文件,以允许查询字符串通过。

我想做一些像^/events-%QUERYSTRING% $/pagebase.php?id=3644 + %QUERYSTRING% [I]

从匹配中删除查询字符串,然后将其附加到写入url的末尾。我只是没有足够的知识如何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

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

您可以尝试匹配一个可选的查询字符串,并将其添加到[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]