![为什么其中一个 htaccess 指令删除了查询字符串,而另一个却没有删除?](https://linux22.com/image/674254/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%20htaccess%20%E6%8C%87%E4%BB%A4%E5%88%A0%E9%99%A4%E4%BA%86%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%8C%E8%80%8C%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%8D%B4%E6%B2%A1%E6%9C%89%E5%88%A0%E9%99%A4%EF%BC%9F.png)
我很想弄清楚为什么其中一个 htaccess 指令删除了查询字符串,而另一个却没有。
RewriteCond %{QUERY_STRING} p=invitations
RewriteRule ^index.php$ /Invitations? [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=corporate_invitations
RewriteRule ^index.php$ /Invitations/Corporate? [L,R=301,QSD]
第一个将从以下 URL 重定向:/index.php?l=page_view&p=invitations并正确重写为/邀请函。
第二,如果你导航到/index.php?l=page_view&p=corporate_invitations您将被重定向至/邀请函/公司?l=page_view&p=corporate_invitations所以我的问题是为什么第一个删除了查询字符串而第二个没有删除。
- 编辑 -
由于我使用的是 Apache 2.4.12,因此我删除了末尾的 ?,因为 QSD 对于其他行来说工作正常。我添加了更多规则,唯一无法删除查询字符串的是 Invitations/Corporate。它确实重定向了,但保留了查询字符串。我认为可能是规则中间的 / 导致的,但 Invitations/Party 工作正常。
整个.htaccess 文件是:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{QUERY_STRING} p=corporate_invitations
RewriteRule ^index.php$ /Invitations/Corporate [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=invitations
RewriteRule ^index.php$ /Invitations [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=message_in_a_bottle_gifts
RewriteRule ^index.php$ /GiftBottles [L,R=301,QSD]
RewriteCond %{QUERY_STRING} p=party_invitations
RewriteRule ^index.php$ /Invitations/Party [L,R=301,QSD]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php%{REQUEST_URI}