【问题标题】:Rewrite QSA, understanding it better重写 QSA,更好地理解它
【发布时间】:2016-04-21 16:59:14
【问题描述】:

所以,我很难理解 QSA。自从

RewriteRule ^search/(.*)$ search.php?s=$1 [NC,L,B,QSA]
RewriteRule ^search/(.*)$ search.php?s=$1 [NC,L,B]

两者都给我相同的结果。我读到 QSA 附加了任何传递的参数(至少我认为这是我从中理解的)。但是它并不完全适合我。

目前我有网址

http://localhost:8888/search/hey+i%27m+a+search+query&SortBy=day

返回

hey i'm a search query&SortBy=day

我可以设置成

RewriteRule ^search/(.*)&SortBy=(.*)$ search.php?s=$1&SortBy=$2 [NC,L,B,QSA]

这将成功返回get参数,但根据我对QSA的理解,它应该被自动处理......对吗?

我从这里得到了我的信息—— What does $1 [QSA,L] mean in my .htaccess file?

基本上,我的问题是,我为什么要使用 QSA?在这种情况下它会提供什么样的好处? (恕我直言不讳,但我不能很好地掌握这一点)

【问题讨论】:

    标签: .htaccess rewrite


    【解决方案1】:

    问题是您的示例 URL 没有查询字符串。您使用? 指定查询字符串:

    http://localhost:8888/search/hey+i%27m+a+search+query?SortBy=day
    

    ?SortBy=day 将通过QSA 标志自动附加到重写的查询字符串。

    【讨论】:

    • 啊,谢谢伙计。我在想 SortBy 将是第二个 GET 参数,但由于搜索查询被写入重写规则,SortBy 被认为是第一个规则,对吧?
    • 没问题。 SortBy 不是重写后的第一个查询参数。您需要使用 ? 的原因是否则 .htaccess 看不到查询字符串。它自己完成所有的合并,但如果它一开始就没有看到它,它就没有什么可合并的了。
    • 啊,好吧,所以放置在这里并不重要,它只是声明有需要处理的 GET 参数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2016-04-09
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多