Mod rewrite 代替请求重写规则

Mod rewrite 代替请求重写规则,mod-rewrite,Mod Rewrite,site.com/link?p=2 给$\u GET['p']==2,即使我已经做了 site.com/link 改写为 site.com/index.php?page=link 所以,我试图替换site.com/link?p=2 使用site.com/link&p=2 RewriteEngine on RewriteRule (.*)\?(.*) $1\&$2 RewriteCond %{REQUEST_URI} !\....$ RewriteRule ^(.*)$ /index.

site.com/link?p=2

给$\u GET['p']==2,即使我已经做了

site.com/link

改写为

site.com/index.php?page=link

所以,我试图替换site.com/link?p=2 使用site.com/link&p=2

RewriteEngine on

RewriteRule (.*)\?(.*) $1\&$2

RewriteCond %{REQUEST_URI} !\....$
RewriteRule ^(.*)$ /index.php?p=$1

它不起作用

RewriteRule
无法看到左侧的查询字符串(
及其后面的任何内容);它只在URL的路径部分匹配

但好消息是,你可能需要做的就是:

RewriteEngine on

RewriteCond %{REQUEST_URI} !\....$
RewriteRule ^(.*)$ /index.php?p=$1 [QSA]

QSA
选项Query String Add告诉您的RewriteRule添加到查询字符串中,而不是替换它(默认行为,这无疑提示了整个问题)。

RewriteRule
无法看到左侧的查询字符串(
及其后的任何内容);它只在URL的路径部分匹配

但好消息是,你可能需要做的就是:

RewriteEngine on

RewriteCond %{REQUEST_URI} !\....$
RewriteRule ^(.*)$ /index.php?p=$1 [QSA]

QSA
选项Query String Add告诉您的RewriteRule添加到查询字符串中,而不是替换它(默认行为,这无疑提示了整个问题)。

谢谢!你知道为什么会这样吗?没有确切的解释,但我猜,
mod_rewrite
的设计师们觉得,一方面,如果没有重写查询字符串所带来的神秘感,它已经足够复杂得令人难以置信了,另一方面,重写查询字符串几乎没有必要,因为它们可以被接收它们的脚本随意重新解释。谢谢!你知道为什么会这样吗?没有确切的解释,但我猜,
mod_rewrite
的设计师们觉得,一方面,如果没有重写查询字符串所带来的神秘感,它已经足够复杂得令人难以置信了,另一方面,重写查询字符串几乎没有必要,因为它们可以由接收它们的脚本随意重新解释。