.htaccess 如何使用htaccess规则从URL中删除查询字符串?

.htaccess 如何使用htaccess规则从URL中删除查询字符串?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,在我网站的每一页的URL末尾都可以是?css=(移动|桌面)查询。我需要像这样删除此查询: example.com/?css=mobile至example.com example.com/dir1?css=mobiletoexample.com/dir1 example.com/dir1/../dir10?css=mobiletoexample.com/dir1/../dir10 我试着这样做,但我不能制定正确的规则 RewriteCond %{QUERY_STRING} css=(mobi

在我网站的每一页的URL末尾都可以是
?css=(移动|桌面)
查询。我需要像这样删除此查询:

  • example.com/?css=mobile
    example.com

  • example.com/dir1?css=mobile
    to
    example.com/dir1

  • example.com/dir1/../dir10?css=mobile
    to
    example.com/dir1/../dir10

我试着这样做,但我不能制定正确的规则

RewriteCond %{QUERY_STRING} css=(mobile|desktop)
RewriteRule ^(.*) problemhere [R=301,L]

我想说,这里的问题是,您需要保留其他潜在的get参数

或许类似的方法可能会奏效:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)&?css=(mobile|desktop)(.*)$
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L,QSD]
该规则集在http服务器主机配置中也应同样有效,如果必须使用动态确认文件(“.htaccess”样式的文件,则也应在动态确认文件(“.htaccess”样式的文件)中有效(应尝试阻止…)

以下是@MrWhite在评论中指出的带有固定条件的修改版本:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*?)&?css=(?:mobile|desktop)(.*)$
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L,QSD]
^(.*)和?css=(移动桌面)(.*)$
-您需要对CondPattern进行一些调整。。。第一个捕获组需要是非贪婪的,这样它就不会使用可选的
&
,而中间的替换组应该是非捕获的(因为您在替换字符串中使用了
%1
%2
)。换言之:
^(.*?&?css=(?:移动|桌面)(.*)$