.htaccess 重写传递所有查询字符串
目前我使用:
RewriteRule ^([^/\.]+)/?$ page.php?page=$1 [L]
这对于传递一个查询字符串时很有用。
但是有没有办法只传递所有查询字符串呢?即一个页面请求可能是:
domain.com/contact?course=23
另一个页面请求可能是:
domain.com/contact?workshop=41
所以我需要知道查询字符串名称是什么,但一次只会传入一个
Currently I use:
RewriteRule ^([^/\.]+)/?$ page.php?page=$1 [L]
Which is good for when passing one querystring through.
But is there a way just to pass all querystrings through? i.e. One page request might be:
domain.com/contact?course=23
and another may be:
domain.com/contact?workshop=41
So I need to know what the query string name is, but only ever one will be passed in at a time
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果我正确理解您的问题,您只需添加
[QSA]
(查询字符串附加)标志到您的RewriteRule
的末尾,这将像您已经完成的那样处理您的请求,并将任何进一步的查询字符串参数添加到末尾。
If I understand your question correctly, you can just add the
[QSA]
(query string append) flag to the end of yourRewriteRule
This will process your request as you've already done, and add any further querystring params onto the end.
这就是我所做的。
RewriteRule ^((/?[^/]+)+/?)$ ?q=$1 [L]
现在,domain.com/ 之后的整个部分都在
$_GET['q 中']
在index.php
中。例如,如果您请求domain.com/articles/12
,则q
包含articles/12
。然后用例如explode('/', $_GET['q'])
来解析它就很简单了。This is what I do.
RewriteRule ^((/?[^/]+)+/?)$ ?q=$1 [L]
Now the whole part after domain.com/ is in
$_GET['q']
inindex.php
. E.g. if you requestdomain.com/articles/12
,q
containsarticles/12
. It's then trivial parse it with e.g.explode('/', $_GET['q'])
.