1

我有一个 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 的一部分并失败。

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

我想做类似 RewriteRule ^/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

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

4

1 回答 1

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]
于 2013-01-13T14:38:28.027 回答