Mod_rewrite 和 $_GET 变量

Posted

技术标签:

【中文标题】Mod_rewrite 和 $_GET 变量【英文标题】:Mod_rewrite and $_GET variables 【发布时间】:2010-12-02 16:58:54 【问题描述】:

如果我从以下位置修改 URL:

http://www.mysite.com/blog/this-is-my-title/1/

http://www.mysite.com/blog.php?title=this-is-my-title&id=1

...以后是否有可能在 URL 上任意附加一个 get 值,或者 mod_rewrite 是否会将其丢弃?

我的重写规则:

RewriteRule    ^blog/([A-Za-z]+)/(0-9]+)/?    blog?title=$1&id=$2     [L]

示例:

我可以去吗 http://www.mysite.com/blog/this-is-my-title/1/?first=Johnnie&last=Wiggles

这基本上意味着

http://www.mysite.com/blog.php?title=this-is-my-title&id=1&first=Johnnie&last=Wiggles

我认为这应该可行,但由于某种原因,目前不适合我。

【问题讨论】:

不看你的 RewriteRule 就无法回答这个问题。 【参考方案1】:

可以使用 QSA(查询字符串附加)标志附加它。

RewriteEngine on
RewriteRule from-url to-url [L,NC,QSA]

【讨论】:

【参考方案2】:

您可以将 QSA 添加到 RewriteRule 标志:

RewriteRule page_([0-9]+)\.html page.php?id=$1 [QSA]

page_1.html?a=2 重定向到page.php?id=1&a=2

但是,请小心,因为请求 page_1.html?id=2 将重定向到 page.php?id=1&id=2,并且(在 PHP 中)$_GET['id'] 将是 2。

【讨论】:

这里是 QSA 文档的链接:httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa

以上是关于Mod_rewrite 和 $_GET 变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP所有带有mod_rewrite的GET参数

需要澄清 mod_rewrite 问题

mod_rewrite 删除 .php 扩展名并保留 GET 参数

使用 mod_rewrite 实现具有多个变量的友好 URL 的最佳方法是啥?

.htaccess 和 mod_rewrite 出错

.htaccess mod_rewrite 变量通过重定向