.htaccess RewriteRule 保留 GET URL 参数

Posted

技术标签:

【中文标题】.htaccess RewriteRule 保留 GET URL 参数【英文标题】:.htaccess RewriteRule to preserve GET URL parameters 【发布时间】:2011-05-03 12:54:58 【问题描述】:

在 htaccess url 重写后保持 url 的参数正常工作时遇到问题。

我的htaccess改写如下:

 RewriteEngine on
 RewriteRule ^([a-z]2,2)/([a-zA-Z0-9_-]+)$ index.php?lang=$1&page=$2

这意味着:

domain.com/index.php?lang=en&page=product 显示为domain.com/en/product

由于某种原因,当我在 URL 的末尾添加 ?model=AB123&color=something 时,我无法使用 $_GET['model']$_GET['color'] 在 php 中检索这些参数,即使它们存在于显示的 URL 中。

为什么不传递变量?

【问题讨论】:

【参考方案1】:

您需要附加 [QSA](查询字符串附加)标签。试试

RewriteEngine on
RewriteRule ^([a-z]2,2)/([a-zA-Z0-9_-]+)$ index.php?lang=$1&page=$2 [QSA]

见http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

【讨论】:

非常感谢。那行得通。有趣的是,在我尝试了一些事情之后,解决方案是多么简单...... 它似乎对我不起作用,即使带有 QSA 标签。显示正确的页面,但由于 $_GET 似乎无法获得,它会引发大量错误。我正在使用RewriteRule ^details/([^/])/?$ details?Pin=$1 [QSA] 你先生是个传奇:)

以上是关于.htaccess RewriteRule 保留 GET URL 参数的主要内容,如果未能解决你的问题,请参考以下文章

在 .htaccess 重定向中保留 HTTP/HTTPS 协议

.htaccess:将根URL重定向到子目录,但保留根URL

将多个 RewriteRule 指令组合成 .htaccess 中的单个规则

。htaccess对RewriteRule的帮助

在 htaccess 中使用 rewriterule 的页面 slug

.htaccess 中的 RewriteRule 在 app.yaml 文件中转换为啥?