【问题标题】:IIRF / APACHE Rewrite Conditions Fail with query stringIIRF / APACHE 重写条件失败,查询字符串
【发布时间】:2012-12-25 11:45:00
【问题描述】:

我有一个 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

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

【问题讨论】:

  • 将 [L,QSA] 附加到 RewriteRule 语句。 “L”表示 Last(不要继续重写),“QSA”是 Query String Append 以将参数添加到您的 URL
  • 这似乎不起作用。它看起来如何?喜欢这个 RewriteRule ^/events$ /pagebase.php?id=3644 [L, QSA]
  • 我发现将查询字符串与 QSA 结合可能会出现问题。我认为这可以解决问题:RewriteRule ^/events$ /pagebase.php?id=3644&%{QUERY_STRING} [L]

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


【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2016-08-13
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多