Php .htaccess包含url的旧部分

Php .htaccess包含url的旧部分,php,.htaccess,Php,.htaccess,我正在尝试为旧的url结构创建一个排序重定向到新的url结构 旧url结构: index.php?page=protocols&id=1 /protocols/view/1 新的url结构: index.php?page=protocols&id=1 /protocols/view/1 这是我的.htaccess,但它没有正确重定向 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{THE_REQU

我正在尝试为旧的url结构创建一个排序重定向到新的url结构

旧url结构:

index.php?page=protocols&id=1
/protocols/view/1
新的url结构:

index.php?page=protocols&id=1
/protocols/view/1
这是我的.htaccess,但它没有正确重定向

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+index\.php\?page=protocols&id=([^&\s]+) [NC]
RewriteRule ^ \/protocols\/view\/%1 [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

重新启动发动机
RewriteCond%{THE_REQUEST}\s/+index\.php\?page=protocols&id=([^&\s]+)[NC]
重写规则^\/protocols\/view\/%1[R,L]
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
它正在重定向到
/protocols/view/1?page=protocols&id=1


如何使其正确重定向?

您需要在规则中使用
QSD
“查询字符串丢弃”标志,以从新URL中删除附加字符串

改变

RewriteRule ^ \/protocols\/view\/%1 [R,L]

如果您的服务器版本不支持
QSD
,则只需在规则的目标url末尾添加一个空问号即可

RewriteRule ^ \/protocols\/view\/%1?  [R,L]

也不需要逃避替换中的斜杠。