Как «удалить» или «игнорировать» строковые переменные запроса через .htaccess?(для WP Super Cache, стиль W3 Total Cache) - PullRequest
0 голосов
/ 18 февраля 2019

Предыстория: нам нужен плагин 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]

Все еще НЕ работает.Это означает, что все еще разные кэши для этих строк запроса не имеют строки запроса.Тем не менее разные кэши с разными значениями для одной и той же переменной строки запроса.

...