Apache在https上操作查询字符串

Giu*_*ppe 7 apache mod-rewrite

以下规则适用于http但不适用于https.

RewriteCond %{QUERY_STRING}    "page=" [NC]
RewriteRule (.*)  /$1? [L]
RewriteRule ^/path/file.html$ https://www.domain.tld/path/file/ [R=301,L]
Run Code Online (Sandbox Code Playgroud)

为什么query_string部分在https中不起作用?

Bri*_*ier 0

根据您问题的评论,您似乎只想在存在页面参数时删除查询字符串。除非存在重定向,否则这种类型的重写规则不会删除或更改 URL。因此,如果您不将R=301or添加R到重写规则中,则查询字符串将不会被删除。以下所有操作都在我的服务器上进行,以删除查询字符串,并且我的服务器是 100% HTTPS:

RewriteCond %{QUERY_STRING} "page=" [NC]
RewriteRule (.*) /$1? [R=301,L]
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 QSD 标志而不是问号:

RewriteCond %{QUERY_STRING} "page=" [NC]
RewriteRule (.*) /$1 [R=301,L,QSD]
Run Code Online (Sandbox Code Playgroud)

或者你可以使用这样的东西:

RewriteCond %{QUERY_STRING} "page=" [NC]
RewriteRule .* /? [R=301,L]
Run Code Online (Sandbox Code Playgroud)

或者只是 R(对于 302)而不是 R=301:

RewriteCond %{QUERY_STRING} "page=" [NC]
RewriteRule (.*) /$1? [R,L]
Run Code Online (Sandbox Code Playgroud)

但除非我使用重定向,否则查询字符串在任何情况下都不会被删除。