【问题标题】:Apache manipulating query string on httpsApache 在 https 上操作查询字符串
【发布时间】:2018-02-12 21:59:18
【问题描述】:

以下规则适用于 http,但不适用于 https。

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

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

【问题讨论】:

  • 只有这些规则吗?
  • 不,在我以这种方式进行了一些 301 重定向之后:RewriteRule ^/path/file.html$ domain.tld/path/file [R=301,L]
  • RewriteRule (.*) /$1? [L] 的意义何在?
  • 删除所有get参数
  • 不工作是什么意思,它会将网址重定向到意外位置吗?

标签: apache mod-rewrite


【解决方案1】:

根据您问题的 cmets,您似乎只想在有页面参数的任何时候删除查询字符串。除非有重定向,否则这种类型的重写规则不会剥离或更改 URL。因此,如果您不将R=301R 添加到重写规则中,则不会删除查询字符串。以下所有在我的服务器上工作以删除查询字符串,我的服务器是 100% HTTPS:

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

或者您可以使用 QSD 标志代替问号:

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

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

RewriteCond %{QUERY_STRING} "page=" [NC]
RewriteRule .* /? [R=301,L]

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

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

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

【讨论】:

    【解决方案2】:

    您真正需要的只是 QSD http://httpd.apache.org/docs/current/rewrite/flags.htm

    RewriteCond %{QUERY_STRING} "page=" [NC]
    RewriteRule (.*)  /$1 [L,QSD]
    

    我不确定为什么它可以在 http 上运行,但在 https 上不行,除非您为 http 和 https 使用单独的虚拟主机并且设置略有不同

    记住重写规则是内部的,除非使用 R 标志。当您使用 R 标志时,它会告诉浏览器转到另一个页面,从而导致完整的服务器/客户端往返。否则,它只会更改请求并正常进行。

    【讨论】:

    • 你能定义没用吗?如果您在浏览器中查看 URI,那么除非您使用 R 标志,否则它不会像我提到的那样改变。您是说查询字符串在您使用的 Apache 下游(php、python、其他 cgi)中仍然可用?
    【解决方案3】:

    我对 .htaccess 文件不是很擅长,我无法解释幕后发生的事情,但我认为你的 .htaccess 文件应该如下所示:

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

    它非常适合

    http://example.com?page=1
    https://example.com/?page=1
    http://example.com/path/file.html
    https://example.com/path/file.html
    

    经过测试(充满爱意)here

    【讨论】:

    • 啊哈哈,如果没有一个建议的答案不起作用,可能你还有其他问题。尝试重新安装 apache,或提供更多详细信息。认为您在 apache 配置文件中的某处有一个小选项或指令,没有人可以帮助您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多