URLでスーパー検索を検出する

URLにスーパーサーチクエリが含まれているかどうかを検出する方法はありますか?

私はスーパーの検索結果を表示するテンプレートを持っていますが、同じテンプレートグループに存在しない存在しないURLが数多く表示されているため、URLに検索クエリが含まれているかどうかを検出できます404テンプレートにリダイレクトします。

例:

site.com/tours/made-up – bad
site.com/tours/search&keywords=island – good

また、スーパー検索クエリ gclid クエリ文字列ページネーションを含むURLに問題があります。非常に似ているサイトが安定しています。あるサイトでは、これはうまく動作します:



  RewriteEngine On
  RewriteBase /

# Redirect index.php Requests
  RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC]
  RewriteCond %{THE_REQUEST} ^GET
  RewriteRule ^index\.php(.+) $1 [R=301,L]

# Force the www
  RewriteCond %{HTTP_HOST} !^www\.
  RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

# HTTPS Redirects
  RewriteCond %{SERVER_PORT} 80
  RewriteRule ^(.*)$ https://www.site.com/$1 [R=301,L]

# Add a trailing slash to paths without an extension
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ /$1/ [R=301,L]

# Standard ExpressionEngine Rewrite
  RewriteCond %{REQUEST_URI} ^/
  RewriteCond %{QUERY_STRING} ^(gclid=.*)
  RewriteRule ^(.+) /index.php?/ [L,PT]
  RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond  $1 !^(themes|index\.php|admin\.php|favicon\.ico|index\.php|path\.php|php\.ini) [NC]
  RewriteRule ^(.*)$ /index.php?/$1 [L]


つまり、ページネーションリンクをクリックすると、 gclid クエリーストリングが削除され、URLにPXXが追加され、更新された結果が得られます。

しかし、まったく同じルールを持つ他のサイトでは、 gclid クエリーストリングの後にPXXが追加され、同じ結果の最初のページが表示されます。

誰かがそれがなぜあるのか知っていますか?または、このシナリオで確実な方法がありますか?

0
nl ru de
うん/ツアー/メイクアップは/ツアー/と同じです。テンプレートルートがどのように役立つかの例がありますか?
追加された 著者 Mark Harrison,
site.com/tours/made-up でレンダリングされるものは何ですか?検索結果ページ?テンプレートルートを使用してこの問題を修正できます(最初の問題ではなく、2番目の問題)。
追加された 著者 Nazgob,

1 答え

結果テンプレート内で行うことができることは、キーワードやカスタムフィールドの検索が条件に依存することです。そうでない場合は、ユーザーをリダイレクトします。

{if super_search_keywまたはds}
{if:else}
{redirect="good/bye"}
{/if}

または

{if super_search_my_custom_field}
{if:else}
{redirect="good/bye"}
{/if}

または

{if super_search_keywまたはds AND super_search_my_custom_field}
{if:else}
{redirect="good/bye"}
{/if}

All of these searches check to see if the cまたはresponding field(s) exist as queries in the URL. :)

2
追加された
ありがとう、私はこれが最初の問題を解決すると思います。さて、私はなぜページ区切りが gclid クエリーストリングで1つのサイトだけでなく他のサイトでも壊れてしまうのか理解できれば...
追加された 著者 Mark Harrison,