wordpress 如何通过.htaccess“删除”或“忽略”查询字符串变量?(适用于WP Super Cache、W3 Total Cache样式)

tyu7yeag  于 2023-10-17  发布在  WordPress
关注(0)|答案(1)|浏览(97)

背景:我们需要WordPress插件WP超级缓存忽略某些查询字符串只为客户端谷歌分析,这些是utm_ tags和gclid.
我们想尝试WP超级缓存,因为它支持不同的缓存为移动的和非移动的。W3 Total Cache没有。
结果是,无论这些查询字符串是否存在于URL中,无论它们的值是什么,都会显示相同的缓存页面(如果该高速缓存不存在,则会为URL创建一个新的缓存(这些查询字符串参数省略))
WordPress插件W3 Total Cache允许您添加此类查询字符串以忽略,然后将其添加到.htaccess,如下所示,(包括其他相关重写规则。我们将此从W3 Total Cache .htaccess复制到WP Super Cachee .htaccess

RewriteRule ^ - [E=W3TC_QUERY_STRING:%{QUERY_STRING}]
RewriteCond %{ENV:W3TC_QUERY_STRING} ^(.*?&|)utm_campaign=.*?(&.*|)$ [NC]
RewriteRule ^ - [E=W3TC_QUERY_STRING:%1%2]
RewriteCond %{ENV:W3TC_QUERY_STRING} ^(.*?&|)utm_source=.*?(&.*|)$ [NC]
RewriteRule ^ - [E=W3TC_QUERY_STRING:%1%2]
RewriteCond %{ENV:W3TC_QUERY_STRING} ^(.*?&|)utm_medium=.*?(&.*|)$ [NC]
RewriteRule ^ - [E=W3TC_QUERY_STRING:%1%2]
RewriteCond %{ENV:W3TC_QUERY_STRING} ^(.*?&|)utm_term=.*?(&.*|)$ [NC]
RewriteRule ^ - [E=W3TC_QUERY_STRING:%1%2]
RewriteCond %{ENV:W3TC_QUERY_STRING} ^(.*?&|)utm_content=.*?(&.*|)$ [NC]
RewriteRule ^ - [E=W3TC_QUERY_STRING:%1%2]
RewriteCond %{ENV:W3TC_QUERY_STRING} ^&+$
RewriteRule ^ - [E=W3TC_QUERY_STRING]
RewriteCond %{ENV:W3TC_QUERY_STRING} =""

并补充如下:

RewriteCond %{REQUEST_URI} \/$ # also added from w3 super cache

因为我们注解掉了WP Super Cache的一些行。

# RewriteCond %{REQUEST_URI} !^.*[^/]$ # commented out from wp super cache
# RewriteCond %{REQUEST_URI} !^.*//.*$ # commented out from wp super cache
# RewriteCond %{QUERY_STRING} ^$ # commented out from wp super cache

然而,它并不起作用。
所以我很确定它归结为最后一行重写。是这样

RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz -f
RewriteRule ^(.*) "/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz" [L]

所以我想也许(.*)仍然捕获所有查询字符串并尝试将其传递给重写规则。因此,将其替换为%{REQUEST_URI},就像W3总缓存一样:

RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/%{REQUEST_URI}/index-https.html.gz -f
RewriteRule ^.* "/wp-content/cache/supercache/%{SERVER_NAME}/%{REQUEST_URI}/index-https.html.gz" [L]

W3 Total Cache看起来像:

RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html" -f
    RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html" [L]

仍然不起作用。这意味着,这些查询字符串与没有查询字符串的缓存仍然不同。对于同一个查询字符串变量,仍然是不同的缓存,具有不同的值。

juud5qan

juud5qan1#

是否需要查询字符串值?你是用它们来测量某种数据还是作为跟踪数据?如果不是,您可以通过例如.htaccess删除查询字符串。就像这样:

# BEGIN Remove Google Adwords query string 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} "gclid=" [NC]
RewriteRule (.*) /$1? [R=301,L,QSD]
<IfModule mod_rewrite.c>
# END Remove Google Adwords query string

你可以在这里阅读更多关于它:https://guides.wp-bullet.com/remove-google-adwords-gclid-query-string-htaccess/
就像那篇文章中所说的,如果你能够访问AdWords,你可以通过**禁用'自动标记'**来禁用查询字符串。

相关问题