Предыстория: нам нужен плагин Wordpress WP Super Cache, чтобы игнорировать определенные строки запросов только для клиентской аналитики Google, это теги utm_ и gclid.
Мы хотим попробовать WP Super Cache, потому что он поддерживаетразличный кеш для мобильных и немобильных.W3 Всего кэша нет.
В результате, независимо от того, существуют ли эти строки запроса в 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 Общий кеш выглядит так:
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]
Все еще НЕ работает.Это означает, что все еще разные кэши для этих строк запроса не имеют строки запроса.Тем не менее разные кэши с разными значениями для одной и той же переменной строки запроса.