.htaccess 规则末尾的问号

.htaccess 规则末尾的问号,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,在第一种情况下,结果为 new site.com/newpage-3?id=3 以秒为单位 new-site.com/newpage-3 “第二次重写规则”中的问号是什么意思??在目的地的末尾(目的地不是正则表达式)表示在没有查询字符串的情况下转到该目的地 RewriteCond %{QUERY_STRING} ^id=(.*)$ RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=301,L] and RewriteRul

在第一种情况下,结果为
new site.com/newpage-3?id=3
以秒为单位
new-site.com/newpage-3


“第二次重写规则”中的问号是什么意思?

?在目的地的末尾(目的地不是正则表达式)表示在没有查询字符串的情况下转到该目的地

RewriteCond %{QUERY_STRING}  ^id=(.*)$
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=301,L]
and
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1? [R=301,L]

如果查询字符串仅包含一个id,它将存储随后在目标中使用的值,因此如果

RewriteCond %{QUERY_STRING}  ^id=(.*)$
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=301,L]
你最终会得到

http://foo.com/oldpage.php?id=54
如果你有

http://new-site.com/newpage-54?id=54
您将转到同一个目标,但查询字符串为空,因此转到

RewriteCond %{QUERY_STRING}  ^id=(.*)$
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1? [R=301,L]
最终将在

http://foo.com/oldpage.php?id=54

“如果查询字符串仅包含id”,如果不包含id,则仅对id为true?RewriteCond%{query_string}^id=(.*)$表示仅当查询字符串匹配时才应用该规则。在本例中,它将匹配以id开头的任何查询字符串=
http://new-site.com/newpage-54