在这里,如果查询字符串不为空,我们将使用空查询字符串重写原始请求。
RewriteEngine On
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^(.*)$ $1?
这已经包含在 Apache 中了[QSD] Query String Discard
:
RewriteRule ^(.*)$ $1 [QSD]
注意:查询字符串允许您跟踪日志文件和外部来源链接中的各种内容。这样做会限制这些选项。
这可能不是您想要做的(这样会丢失很多用于 SEO 的旧链接)。因此,以下是如何将旧查询字符串作为 301 重定向重定向到新 URL。对于不熟悉 RegEx 或 Apache 工作原理的人来说,这在视觉上会有些混乱。在字符串的第一部分以问号结尾表示“可能是前面的字符”。在这种情况下,我们?
在替换的末尾附加了 (不是 REGEX 模式),因为 Apache 的默认行为类似于QSD 标志的 Apache 手册中的[QSA]
(查询字符串附加)。因此,单曲的添加本身就是创建一个空查询字符串以使现有字符串无效。StackOverflow 上有几个使用这种方法的答案。?
RewriteCond %{QUERY_STRING} page=(.*)
RewriteRule .* %1/? [R=301,L]
使用[QSD]
你可以这样写:
RewriteCond %{QUERY_STRING} page=(.*)
RewriteRule .* %1/ [R=301,L,QSD]
您的另一场比赛需要一个类似的文件contact.php
并将其重定向到/contact/
. 这也可能仍然有效。
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.+)\.php$ /$1/? [R=301,L]
这条规则也可以用 QSD 编写:
RewriteRule ^(.+)\.php$ /$1/ [R=301,L,QSD]