以下规则适用于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中不起作用?
答案 0 :(得分:0)
根据您的问题的评论,您似乎只想在有页面参数的情况下删除查询字符串。除非存在重定向,否则此类重写规则不会剥离或更改URL。因此,如果您不在重写规则中添加R=301
或R
,则不会删除查询字符串。以下所有工作都在我的服务器上删除查询字符串,我的服务器是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]
但除非我使用重定向,否则不会删除查询字符串。
答案 1 :(得分:0)
您真正需要的只是 QSD http://httpd.apache.org/docs/current/rewrite/flags.htm
RewriteCond %{QUERY_STRING} "page=" [NC]
RewriteRule (.*) /$1 [L,QSD]
我不确定为什么它会在http而不是https上工作,除非你为http和https使用单独的vhosts并且settigns略有不同
请记住,除非使用R标志,否则重写规则是内部的。当您使用R标志时,它告诉浏览器转到另一个页面,导致完整的服务器/客户端往返。否则,它只是更改请求并正常进行。
答案 2 :(得分:0)
我对.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