首页 > 解决方案 > .htaccess 包括 url 的旧部分

问题描述

我正在尝试为旧的 url 结构创建各种重定向到新的 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>

它正在重定向到/protocols/view/1?page=protocols&id=1

如何让它正确重定向?

标签: php.htaccess

解决方案


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

改变

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

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

如果您的服务器版本不支持QSD,那么只需在规则的目标 url 末尾放置一个空问号

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

推荐阅读