我有这个网址:
oldsite.com/profile.php?uid=10
我想将其重写为:
newsite.com/utenti/10
我怎样才能做到这一点?
我写了这个:
RewriteCond %{QUERY_STRING} ^uid=([0-9]+)$ 重写规则 ^profile\.php$ http://www.newsite.com/utenti/$1 [R=301,L]
但是$1 匹配完整的查询字符串而不仅仅是用户 ID。
答案1
“$1” 与同一行 (RewriteRule) 上的第一对括号匹配;您需要“%1”,它与 /previous/ 行上的第一对括号匹配 - RewriteCond:
RewriteCond %{QUERY_STRING} ^uid=([0-9]+)$
RewriteRule ^profile\.php$ http://www.newsite.com/utenti/%1 [R=301,L]
更好的方法是只用一行(RewriteRule)来完成,但如果 uid 在 QueryString 中,则无法这样做。
答案2
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_NAME} ^oldsite.com$
RewriteCond %{QUERY_STRING} uid=([0-9]+)
RewriteRule ^/profile\.php http://newsite.com/utenti/%1 [NC,R=301,L]
</IfModule>
重点是使用 %1,而不是 $1