site.com/link?p=2
给 $_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
选项“查询字符串添加”告诉您的RewriteRule添加到查询字符串而不是替换它(默认行为,这无疑引发了整个问题)。
在某些情况下,您需要在同一个正则表达式中同时使用 URI 和查询字符串。我正在为这种情况提供答案,因为此请求也被 Google 重定向到此处。
这种情况的一个例子是检查正则表达式断言中是否存在 URL 部分或参数。对于这种情况,请使用
%{THE_REQUEST}
参数,而不是 %{REQUEST_URI}
。这是在这样的示例中的样子(类似于我在现实生活场景中的情况):
RewriteCond %{THE_REQUEST} "/account(?!/password|/\?action=reset_pwd).*" [NC]
RewriteRule .? /profile [R,L]